http://www.perlmonks.org?node_id=105241

entropy has asked for the wisdom of the Perl Monks concerning the following question:

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.

Originally posted as a Categorized Question.

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

Replies are listed 'Best First'.
Re: How do I block until new data has been added to a file?
by kjherron (Pilgrim) on Aug 16, 2001 at 19:04 UTC
    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.