non-block reading from pipe stdout
kdevel
kdevel at vogtner.de
Tue Oct 3 12:32:43 UTC 2017
On Tuesday, 3 October 2017 at 12:20:09 UTC, Oleg B wrote:
> while (!tryWait(pp.pid).terminated)
> {
> auto cnt = read(fd, buf.ptr, buf.length); //
> C-style reading
> if (cnt == -1 && errno == EAGAIN) // C-style error
> checking
> yield();
> else if (cnt > 0)
> {
> doSomething(buf[0..cnt]);
> yield();
> }
> }
IMHO a program should sleep (consume 0 CPU time and 0 energy) if
there is nothing to process. This is best accomplished by not
polling on a file descriptor in order to check if data has
arrived. If your program must yield() there's probably something
wrong with the design. I would suggest you put all the
filedescriptors into a fd_set an then select(3) on the set.
More information about the Digitalmars-d-learn
mailing list