Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
As Fletch indicated, your problems building IO don't look like a problem with your OS's IPC, but rather some problem with the perl header files.

Now, about this named pipe. Your writer repeatedly opens the pipe, writes one line of text to it, and closes the pipe. The reader repeatedly opens the pipe, reads one line of text from it, then closes the pipe.

Something you need to realize about pipes is that they don't hold data independent of their writers and readers. You can't open a pipe, write some data, and close the pipe, leaving the data to be read by future reader. They don't work that way.

When a writer opens a pipe, the open() blocks until a reader also opens the pipe. Then, all writes to the pipe are passed directly to the reader. If both reader and writer close the pipe while some data is waiting to be read, that data is lost.

On top of that, the reader is doing buffered reads, which means that it's reading all available data from the pipe, not just one line's worth. The rest of the data is held inside an IO buffer, waiting for you to use <> again. When you close & reopen the pipe instead, you lose the buffered data.

In short, you have a race condition between these two processes. If the writer manages to write two lines to the pipe before the reader reads, then the reader will read both lines at once, return one of them to your script, and throw the other line away when you close the pipe.

To fix your writer, you just need to open the pipe once instead of multiple times. In bourne shell you could do this:

for word in foo bar baz bletch quux qip qua do echo $word done > foo
For you reader, something like the following should be fine:
open FIFO, "<foo" or die "foo: $!\n"; while (<FIFO>) { chomp; print "$_\n"; }

In reply to Re: Improvised pipes (code) by kjherron
in thread Improvised pipes (code) by deprecated

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (7)
As of 2024-04-24 10:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found