Is a successful call to write(2) atomic?
John Levine
johnl at iecc.com
Wed Jun 16 01:26:09 UTC 2021
It appears that Ronald F. Guilmette <rfg at tristatelogic.com> said:
>More to the point, if indeed each call to write() *is* "atomic"... at least
>in the sense that the given buffer will be treated like an indivisable whole,
>all of the way along its journey to some physical device... then why are
>users nontheless being encouraged, still, to "use some form of concurrency
>control"? I mean what would be the point of that if in fact write() never
>busts up the hunks of data given to it into separate sub-hunks?
I think it depends on the device. If I just want to write stuff to a log
file and not get it scrambled, this should do the trick:
fd = open("somefile", O_CREAT|O_WRONLY|O_APPEND);
/* put some stuff in buf[] */
flock(fd, LOCK_EX);
write(fd, buf, strlen(buf)): /* O_APPEND ensures it's added at the end */
flock(fd, LOCK_UN);
R's.
John
More information about the freebsd-questions
mailing list