in reply to Sending EOF to pipe

You have a couple of things here which are interacting to give you your unexpected result. I've added a few more comments which may make the code a little more robust.

  1. By chomping data input in the parent, you remove the input record seperator, $/.
  2. The child does not process any but the last record. The inner while loop is empty. This behavior is masked by #1, you only have one record.
  3. You don't appear to have autoflush on for the pipe. That makes the child sit around till EOF or a full buffer condition.
  4. You should call exit in the child with argument 0. An irrelevent nitpick, but worth repairing.
  5. Both while (1) {} loops seem unnecessary.
  6. There's no need to test for the special '644' end line in the child, eof will take care of that.

If you correct the first two, the code should work.

After Compline,
Zaxo