stdin/stdout and flush
Andre Pany
andre at s-e-a-p.de
Tue Aug 27 21:01:58 UTC 2019
On Tuesday, 27 August 2019 at 20:45:44 UTC, a11e99z wrote:
> On Tuesday, 27 August 2019 at 20:09:34 UTC, Andre Pany wrote:
>>
>> This applications will be called by a second application:
>> import std;
>> void main() {
>> auto p = pipeShell("a", Redirect.all);
>> p.stdin.writeln("e1");
>> p.stdin.writeln("10");
>> p.stdin.writeln("e2");
>> p.stdin.writeln("9");
>> p.stdin.flush();
>> p.stdout.readln();
>> }
>>
>> In application a.d the first "while round" will succeed as
>> expected. But in the second "while round" the readln does not
>> wait until there is an input but gets an empty string. The
>> to!int will therefore throw an exception.
>>
>> Why does the readln returns an empty string in the second run
>> and does not wait on an input?
>>
>
> probably cuz no second "send round" in b.d.
> or u mean second half-round "e2,9"?
I mean the coding in the while loop is executed twice.
If I start application A in the console using ```dmd -run a.d```
the readln functions are waiting on stdin input in first and
second execution of the while logic.
But if application A is called from application B then in the
second execution of the while loop, the readln statements just
return empty strings.
Do I have to clear some buffers?
Kind regards
Andre
More information about the Digitalmars-d-learn
mailing list