0

poll 运行无限时间间隔。我希望在将某些内容写入文件或更新文件时进行轮询。但 poll 无法检测何时写入文件。

        #include <stdio.h>
        #include <poll.h>
        #include <stdlib.h>
        #include <fcntl.h>
        #include <errno.h>
        #include <sys/types.h>
        #include <unistd.h>

        int main() {
                char buf[5]="true";
                struct pollfd ufds[1];
                int rv;
                ufds[0].fd = 0;
                ufds[0].events = POLLIN;
                char *filename="textfile.txt";
                ssize_t ret_write,ret_read;

                ufds[0].fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 5);
                if(ufds[0].fd== -1){
                perror("open");
                return 3; 
                } 

                while(1) {

                        ret_write= write (ufds[0].fd, &buf, (ssize_t) 5);


                        if((rv = poll(ufds, 1,-1 )) == -1) perror("select");
                        else if (rv == 0) printf("Timeout occurred!\n");
                        else if (ufds[0].revents & POLLIN) {
                                printf("return hit\n");
                                read(ufds[0].fd, buf, 5);
                        }
                        fflush(stdout);
                }
                return 0;
        }
4

1 回答 1

0

您的示例无法工作,因为该文件未打开以供阅读。即使打开文件进行读取,代码也不会按预期工作,因为 poll 会在文件末尾成功返回。

你想要的是 inotify 函数。请先自己尝试,并在代码未按预期工作时提出问题。

于 2013-04-03T11:34:07.453 回答