Reading input from piped stdin.

Steven Schveighoffer schveiguy at yahoo.com
Fri Feb 14 11:12:24 PST 2014


On Fri, 14 Feb 2014 14:05:01 -0500, Thomas <sitronvask at gmail.com> wrote:

> I'm new to D, and I find it quite enjoyable so far.
> I have however stumbled upon a problem which I can't seem to
> figure out.
>
> I am trying to make a program that creates a child process,
> writes something to the child process stdin and reading from its
> stdout. I am going to use it later for testing out process pair
> redundancy.
>
> Appearently the child blocks at "s = stdin.readln()". If I remove
> all writing to the child, and instead just read its output,
> everything works fine. My code is attached below:

stdin and stdout are buffered streams. Buffered streams in D only flush on  
newline when they are attached to a console (terminal window). Otherwise,  
they wait until the buffer is full before flushing. Buffer is probably  
about 4096 bytes.

What is likely happening is that you are writing, it's going into the  
buffer, but not flushing, and then you are waiting for the response (which  
likely is also not flushing from the child process).

Try adding flushes after each writeln.

BTW, this is not really a D problem, you would have the same issue in C.

-Steve


More information about the Digitalmars-d-learn mailing list