On Friday, 11 December 2020 at 11:05:59 UTC, frame wrote:
On Friday, 11 December 2020 at 02:31:24 UTC, kdevel wrote:
auto s = cast (string) stdin.byChunk(4).join;
As strace reveals the resulting program sometimes reads twice
zero
characters before it terminates:
read(0, a <-- A,
return
"a\n", 1024) = 2
read(0, "", 1024) = 0 <-- ctrl+d
read(0, "", 1024) = 0 <-- ctrl+d
Any comments or ideas?
I see expected behaviour here if you use a buffer of length 4.
I don't know what you want to achieve here.
Read till EOF.
If you want to stop reading from stdin, you should check for
eof() instead.
My code cannot do that because the function byChunk has control
over the
file descriptor. The OS reports EOF by returning zero from
read(2). The
D documentation of byChunk [1] does not mention such a check for
eof
either.
You should not check yourself for the character.
Where did I do that here?
auto s = cast (string) stdin.byChunk(4).join;
eof() can be lock in by multiple ways and it is the only
correct way to handle all of them.
??
[1] https://linux.die.net/man/2/read
[2] https://dlang.org/phobos/std_stdio.html#byChunk