Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

How do I block until new data has been added to a file?

by entropy (Sexton)
on Aug 16, 2001 at 04:17 UTC ( #105241=categorized question: print w/replies, xml ) Need Help??
Contributed by entropy on Aug 16, 2001 at 04:17 UTC
Q&A  > files


When reading from the keyboard or a pipe, the select command can be used to tell when new data is available. On an ordinary file, however, select seems to always say the file is ready for reading, even when I am at the EOF. Of course, I can just keep trying to sleep and read over and over until there is something there... but I would rather have my program block until data is available, and then read it immediately.

Answer: How do I block until new data has been added to a file?
contributed by kjherron

A unix-specific answer: Unix doesn't provide a mechanism to do what you ask. select() and poll() are just telling you that you can perform a read() without blocking, and reading from a file never blocks. Even the "tail -f" command works by alternately sleeping and checking the file that it's tailing.

If you're worrying about wasting CPU or something like that, I suggest you shouldn't be concerned about it; waking up once a second or so and performing a read() isn't going to burden the computer. If you need to get this working for some other reason, here's an idea: spawn a subprocess to read from the file, copying everything that it reads to a pipe being read by the main process. This gives you something the main process can select() on.

Please (register and) log in if you wish to add an answer

  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?

    What's my password?
    Create A New User
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others meditating upon the Monastery: (4)
    As of 2021-02-28 15:31 GMT
    Find Nodes?
      Voting Booth?

      No recent polls found