March 20, 2016 Linux blocked on file read on exit, need select | ||||
---|---|---|---|---|
| ||||
Program is blocked on exit, because of a blocking file read. I'd be glad to just kill it and exit. In this case I'm using dinotify, I exposed the fd. This issue is it's not working or blocked on exit. Never mind the constant monitor.add static immutable string stdoutFn="passFiles/vAppStdout"; void monitorStdout(){ auto monitor = iNotify(); Watch watch = monitor.add(stdoutFn.ptr, IN_ALL_EVENTS ); timeval timeout={tv_sec:0, tv_usec:500000 }; //int flags = fcntl(monitor.fd, F_GETFL, 0); //fcntl(monitor.fd, F_SETFL, flags | O_NONBLOCK); while(run){ fd_set fdset; FD_ZERO(&fdset); FD_SET(monitor.fd, &fdset); if(select(monitor.fd+1, &fdset, cast(fd_set*)null, cast(fd_set*)null, &timeout) ){ auto events = monitor.read(); watch = monitor.add(stdoutFn.ptr, IN_ALL_EVENTS ); } writeln("Exit monitor"); } |
March 21, 2016 Re: Linux blocked on file read on exit, need select | ||||
---|---|---|---|---|
| ||||
Posted in reply to Darrell Gallion | I don't know, but you could always just use fcntl if you already can assume you're on Linux. extern (C) int fcntl(int, int, int); C keeps the constants under lock and key of course, so you have to specify them manually. But you could write a C program to print them out, or generate D code I suppose. const int F_SETFL = 4 const int F_GETFL = 3 const int O_NONBLOCK = 2048 fcntl(fd,F_SETFL,O_NONBLOCK | fcntl(fd,F_GETFL,42)); not tested or anything. |
Copyright © 1999-2021 by the D Language Foundation