2017-02-12 69 views
0

我正在使用popen在我的应用程序中打开另一个进程并解析其输出。我希望在计划完成任何输出后立即收到通知。目前,我的程序中的所有内容均使用epoll进行此类操作。现在popen确实会给我一个FILE *而不是fd。使用fileno函数并将得到的fd放入epoll会节省吗?如果不是,还有其他方法吗?我不希望这个过程阻止,这就是为什么我想要通知。在epoll中使用FILE *

+0

我建议不要混合缓冲的I/O('FILE *')和(e)轮询。就我个人而言,我只会写我自己的'popen_fd',它返回一个描述符,你可以从'read'中读取。 – melpomene

回答

0

是的,它是安全的,只要你不用文件描述符做任何额外的事情,不用小心它似乎是安全的。还有一件事是,你可能想把文件描述符标记为非阻塞。所以你可以read()没有阻止和处理EBUSYEAGAIN检查errno

+0

我同意你在FILE *接口的文件描述符上使用'epoll()'是安全的 - 它只是将描述符返回为活动状态。但是*将文件描述符标记为非阻塞*?如果实际阅读是通过问题中提到的基于FILE *的stdio函数完成的,我不认为这是安全的。标记“FILE *”的底层文件描述符非阻塞可能会导致严重的问题,因为库调用几乎肯定不会使用非阻塞描述符。 –