これは、「man select」のコードサンプルに、書き込まれている実際のファイルを読み取るための数行を加えたものです。に./myfile.txt
書き込まれると、select
そのfdから読み取ることができるようになると思いました。しかし、txtファイルが存在する限り、selectは常にwhileループに戻ります。新しいデータがファイルの最後に書き込まれたときにのみ返されるようにしたい。私はそれがどのように機能するべきかと思いました。
#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);
}