文件描述符轮询

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 文件)请帮助

mvd*_*vds 7

poll()实际上不适用于打开的文件。由于read()文件上的 a 永远不会阻塞,因此poll()将始终返回您可以从文件中非阻塞读取的信息。

这将(几乎)适用于字符设备*、命名管道**或套接字,因为当您read()在没有可用数据时阻止它们。(然后您还需要实际读取该数据,否则 poll 会一次又一次地告诉您数据可用)

要“轮询”增长/缩小的文件,请在循环中查看man inotify或实现您自己的轮询fstat()

* 块设备是一个故事;虽然从技术上讲,从硬盘读取可以阻塞 10 毫秒或更长时间,但这在 linux 中不被视为阻塞 I/O。
** 另请参阅如何使用 bash 刷新命名管道