On Monday, 26 March 2012 at 21:20:00 UTC, Ali Çehreli wrote:
On 03/26/2012 02:12 PM, Tyro[17] wrote:

> I don't want to provide an explicit terminator, but instead
> rely on Ctrl-D/Ctrl-Z to do the job while being able to
> continue processing read request. As explained by Andrei,
> this is not possible. But in my mind if the stdin stream
> can be opened once, it can be opened again. What is the
> negative effect of testing if it is closed and reopening it
> on entering readf? Especially since there is a unique
> implementation of readf to deal with input from stdin.
>
> What is wrong with implementing reopen() in File for
> specific use with stdin and then implementing readf
> like this:
>
> uint readf(A...)(in char[] format, A args)
> {
> if(stdin.eof) stdin.reopen();
> return stdin.readf(format, args);
> }
>
> Andrew

That doesn't fit the way standard input and output streams work. These streams are bound to the application from the environment that has started them. The program itself does not have a way of manipulating how these streams are ended or connected.

Imagine that your program's stdin if piped from the output of another process:

  other | yours

Once 'other' finishes with its output, that's the end of the input of 'yours'. 'yours' cannot communicate to the environment that it would like to continue reading more.

Thanks for that explanation. I am only now understanding the
problem.

What you are asking for could be achieved only if both the environment and the program agreed that this would be the case.

Not really, we can "borrow" Ctrl-D form the OS until our input is
complete. Please see response to Andrei.

Maybe I am missing something but that has been standard on many environments.

Ali


Reply via email to