考虑以下代码片段。
#include <fcntl.h>
#include <stdio.h>
#include <sys/poll.h>
#include <unistd.h>
int main(int argc, char ** argv) {
int fd;
char buf[1024];
int i;
struct pollfd pfds;
fd = open(argv[1], O_RDONLY);
while (1) {
pfds.fd = fd;
pfds.events = POLLIN;
poll(&pfds, 1, -1);
if (pfds.revents & POLLIN) {
i = read(fd, buf, 1024);
write(1, buf, i);
}
}
return 0;
}
这个程序接收一个文件名,打开相应的文件,并“轮询”它的文件描述符,以便监控数据的可用性。每当poll
检测到可用数据时,就会打印这些新数据。
但是,这个程序会发生什么?如果我要监视的文件在程序启动时已经包含数据,则会打印其内容。没关系。但是,后来,当我使用文本编辑器编辑文件并保存它时,我的程序不会打印新数据。
那么,如何监视常规文件描述符(而不是使用其路径的文件)以获取新数据?我必须使用除 之外的其他功能poll
吗?还是我错过了任何pollfd
标志?