This is sample code from "man select" plus a few lines to read the actual file that is being written to. I suspected that when ./myfile.txt is written, select will return that it can now read from this fd. But what happens is that select constantly returns in the while loop while the txt file exists. I want it to be returned only when new data is written to the end of the file. I thought that it should be so.
#include <stdio.h> #include <fcntl.h> #include <stdlib.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int main(void) { fd_set rfds; struct timeval tv; int retval; int fd_file = open("/home/myfile.txt", O_RDONLY); /* Watch stdin (fd 0) to see when it has input. */ FD_ZERO(&rfds); FD_SET(0, &rfds); FD_SET(fd_file, &rfds); /* Wait up to five seconds. */ tv.tv_sec = 5; tv.tv_usec = 0; while (1) { retval = select(fd_file+1, &rfds, NULL, NULL, &tv); /* Don't rely on the value of tv now! */ if (retval == -1) perror("select()"); else if (retval) printf("Data is available now.\n"); /* FD_ISSET(0, &rfds) will be true. */ else printf("No data within five seconds.\n"); } exit(EXIT_SUCCESS); }
c select file-io
glutz
source share