DGe*_*try 27
在Linux(或任何Unix-y OS)中,您可以将popen()使用的基础文件描述符标记为非阻塞.
#include <fcntl.h>
FILE *proc = popen("tail -f /tmp/test.txt", "r");
int fd = fileno(proc);
int flags;
flags = fcntl(fd, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(fd, F_SETFL, flags);
Run Code Online (Sandbox Code Playgroud)
如果没有可用的输入,fgets将返回NULL,并将errno设置为EWOULDBLOCK.
Suf*_*ian 15
fgets() 是一个阻塞读取,如果没有数据,它应该等到数据可用.
你会想用执行异步I/O select(),poll()或epoll().然后在有可用数据时从文件描述符执行读取.
这些函数使用FILE*句柄的文件描述符,检索方式为:int fd = fileno(f);
| 归档时间: |
|
| 查看次数: |
22016 次 |
| 最近记录: |