Hal Murray <hmur...@megapathdsl.net>:
> I'm not enough of a Unix file system wizard.  Are there any guarantees about 
> multi-threaded writes to the same file not getting scrambled?  Will it work 
> if 
> we buffer everything into a big buffer and do a single write?

Under Linux, yes, up to 4096 bytes. Look for "I wrote a script to test" on
this page:

https://stackoverflow.com/questions/1154446/is-file-append-atomic-in-unix

There's a great deal of confusion abroad about this. The first answer reflects
a widespread belief that 512-byte writes are guaranteed atomic by POSIX.
That belief is wrong, as is pointed out in the comments. PIPE_BUF is a real
thing in POSIX but has nothing to do with file writes.

I am here to add that I believe the myth about POSIX persists in
practice because 512 byte file write(2) operations *are* in fact atomic on
every Unix. So the mythology about PIPE_BUF is only half wrong; POSIX
does not require it but it's true anyway.

Yes, I have used this assumption in production code under multiple
Unixes and not been bitten.

The way I would recommend handling this is with a PIPE_BUF sized buffer,
write(2), and a comment that explains that PIPE_BUF is accidentally
correct here.  Been there, done that myself.  This is very old lore.
-- 
                <a href="http://www.catb.org/~esr/";>Eric S. Raymond</a>

My work is funded by the Internet Civil Engineering Institute: https://icei.org
Please visit their site and donate: the civilization you save might be your own.


_______________________________________________
devel mailing list
devel@ntpsec.org
http://lists.ntpsec.org/mailman/listinfo/devel

Reply via email to