Problem Statement
One process opens a file for appending (assume there is no O_APPEND, appending here means first lseek()
to the file end then write()
), and then forks a child. The two dependent processes append to the file simultaneously. Assume that lseek()
and write()
are both atomic. Give an example to discuss the necessity of having lseek()
and write()
be an atomic operation in this scenario.
My Thoughts
write()
updates the offset to the end of the data just written.These 2 points guarantee that even in the following scenario, the data written by P2
won't be overwritten by P1
.
P1 lseek()
P2 lseek()
P2 write() // after this operation, the offset still points to the file end
P1 write()
My Problem
So, do lseek()
and write()
still need to be one atomic operation in this specific case?
It turned out it's the wording making me question myself.
The answer is that they don't have to be an atomic operation in this specific case.