[fpc-pascal]Problem with AssignStream() on Linux

Michael Van Canneyt michael.vancanneyt at wisa.be
Mon Jun 24 18:13:41 CEST 2002


On Sat, 22 Jun 2002, Yet Another Geek wrote:

> When I try to use AssignStream() to read more than
> 4096 bytes, my program hangs.

That is because the piping mechanism uses a 4K memory
buffer.

>
> Not sure what is causing this, but seems to be
> something of a "deadlock" situation -
> the child will not continue writing until the buffer
> is flushed, and the parent
> will not flush the buffer until the child is finished
> writing.

This is correct.

>
> So both programs are stuck waiting on each other.
>
> Does anyone know a workaround for this, or am I doing
> something wrong ?

Yes.
1. Use half the buffer size.
2. Use non-blocking IO - then your program will never hang, you'll get
   an EWOULDBLOCK error when there is no data available.


Michael.






More information about the fpc-pascal mailing list