Contributed by entropy
on Aug 16, 2001 at 04:17 UTC
Q&A
> files
Description: 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: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
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?
|
|
Chatterbox?
|
How do I use this? | Other CB clients
|
Other Users?
|
Others meditating upon the Monastery: (4) As of 2021-02-28 15:31 GMT
|
Sections?
|
|
Information?
|
|
Find Nodes?
|
|
Leftovers?
|
|
Voting Booth?
|
No recent polls found
|
Notices?
|
|
|