Arp*_*pit 3 c unix linux polling
我创建了一个以下程序,我希望在其中轮询我在程序中打开的文件的文件描述符。
#define FILE "help"
int main()
{
int ret1;
struct pollfd fds[1];
ret1 = open(FILE, O_CREAT);
fds[0].fd = ret1;
fds[0].events = POLLIN;
while(1)
{
poll(fds,1,-1);
if (fds[0].revents & POLLIN)
printf("POLLING");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它正在无限循环中。我期望在文件发生某些操作时运行循环。(它是一个 ASCII 文件)请帮助
poll()实际上不适用于打开的文件。由于read()文件上的 a 永远不会阻塞,因此poll()将始终返回您可以从文件中非阻塞读取的信息。
这将(几乎)适用于字符设备*、命名管道**或套接字,因为当您read()在没有可用数据时阻止它们。(然后您还需要实际读取该数据,否则 poll 会一次又一次地告诉您数据可用)
要“轮询”增长/缩小的文件,请在循环中查看man inotify或实现您自己的轮询fstat()。
* 块设备是一个故事;虽然从技术上讲,从硬盘读取可以阻塞 10 毫秒或更长时间,但这在 linux 中不被视为阻塞 I/O。
** 另请参阅如何使用 bash 刷新命名管道