On Tuesday, 3 October 2017 at 10:45:21 UTC, kdevel wrote:
On Tuesday, 3 October 2017 at 00:22:28 UTC, Oleg B wrote:
but get error "Resource temporarily unavailable".

You get EAGAIN because there is no data available at the time of reading.

From the manpage of read:

ERRORS
EAGAIN Non-blocking I/O has been selected using O_NONBLOCK and no data
              was immediately available for reading.

I found only one way: C-style

        auto pp = pipeShell(updaterScriptCommand, Redirect.all,
                            null, Config.none, workDir);

        import core.sys.posix.unistd : read;
        import core.stdc.errno;
        import core.sys.posix.fcntl;

        int fd = pp.stdout.fileno;
        int flags = fcntl(fd, F_GETFL, 0);
        flags |= O_NONBLOCK;
        fcntl(fd, F_SETFL, flags); // C-style setting file config

        char[256] buf;
        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();
            }
        }

Reply via email to