FAQ 5.21: All I want to do is append a small amount of text to the end of a file. Do I st...

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

This message is one of several periodic postings to comp.lang.perl.misc
intended to make it easier for perl programmers to find answers to
common questions. The core of this message represents an excerpt
from the documentation provided with Perl.


5.21: 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?

    If you are on a system that correctly implements flock() and you use the
    example appending code from "perldoc -f flock" everything will be OK
    even if the OS you are on doesn't implement append mode correctly (if
    such a system exists.) So if you are happy to restrict yourself to OSs
    that implement flock() (and that's not really much of a restriction)
    then that is what you should do.

    If you know you are only going to use a system that does correctly
    implement appending (i.e. not Win32) then you can omit the seek() from
    the above code.

    If you know you are only writing code to run on an OS and filesystem
    that does implement append mode correctly (a local filesystem on a
    modern Unix for example), and you keep the file in block-buffered mode
    and you write less than one buffer-full of output between each manual
    flushing of the buffer then each bufferload is almost guaranteed to be
    written to the end of the file in one chunk without getting intermingled
    with anyone else's output. You can also use the syswrite() function
    which is simply a wrapper around your systems write(2) system call.

    There is still a small theoretical chance that a signal will interrupt
    the system level write() operation before completion. There is also a
    possibility that some STDIO implementations may call multiple system
    level write()s even if the buffer was empty to start. There may be some
    systems where this probability is reduced to zero.


Documents such as this have been called "Answers to Frequently
Asked Questions" or FAQ for short.  They represent an important
part of the Usenet tradition.  They serve to reduce the volume of
redundant traffic on a news group by providing quality answers to
questions that keep coming up.

If you are some how irritated by seeing these postings you are free
to ignore them or add the sender to your killfile.  If you find
errors or other problems with these postings please send corrections
or comments to the posting email address or to the maintainers as
directed in the perlfaq manual page.

Note that the FAQ text posted by this server may have been modified
from that distributed in the stable Perl release.  It may have been
edited to reflect the additions, changes and corrections provided
by respondents, reviewers, and critics to previous postings of
these FAQ. Complete text of these FAQ are available on request.

The perlfaq manual page contains the following copyright notice.


    Copyright (c) 1997-2002 Tom Christiansen and Nathan
    Torkington, and other contributors as noted. All rights

This posting is provided in the hope that it will be useful but
does not represent a commitment or contract of any kind on the part
of the contributers, authors or their agents.

Site Timeline