in reply to Exclusive open for append

There's no such thing as an "exclusive append".

Both programs will have the file open for append. If both programs write to them, there's no garantee you end up with something that isn't garbage - some OSses will do a seek() before a write(), and a flush() after a write(), if your writes() are small enough, the messages won't be garbled.

If you want to have exclusive access, flock() your handles.

Perl --((8:>*

Replies are listed 'Best First'.
Re^2: Exclusive open for append
by tmoertel (Chaplain) on Nov 18, 2005 at 18:53 UTC
    Both programs will have the file open for append. If both programs write to them, there's no garantee you end up with something that isn't garbage...

    On sane Unix-like systems, there is a guarantee: you won't get garbage, regardless of the size of your writes. [1] If the log file is opened in append mode and each entry is committed as a single write (system call), Unix file semantics guarantee that the entries will be appended to the file atomically. (For more information see Re^3: Looking for a simple multiprocess-enabled logging module, which quotes the relevant bits of the Single Unix Specification.)

    See also "All I want to do is append a small amount of text to the end of a file. Do I still have to use locking?" from perlfaq5.

    Cheers,
    Tom

    [1] Provided that your log file resides on a filesystem that supports Unix semantics. Network-mounted filesystems often fall short.