Comment puis sélectionnez() attendre régulier sur les descripteurs de fichiers (non-prises de courant)?

C'est l'exemple de code à partir de "l'homme sélectionnez" plus que quelques lignes pour lire un fichier qui est en cours d'écriture. Je me doutais bien que lorsque le ./myfile.txt est écrit, select serait de retour que l'on peut maintenant lire à partir de ce fd. Mais ce qui se passe est que sélectionnez revient constamment dans la boucle while tant que le fichier txt existe. Je veux qu'il ne reviendra que lorsque de nouvelles données sont écrites à la fin du fichier. J'ai pensé que c'est la façon dont il devrait fonctionner.

#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);
}
Alors, quelle est votre question ? Qui a dit select travailler uniquement sur des sockets ?
question édité. désolé pour la confusion.
select peut être utilisé sur aucun type de fichier descripteur, n'a pas d'importance si c'est une prise, d'un fichier ou d'un tuyau ou d'un descripteur. Cependant, vous ne pouvez pas les utiliser pour vérifier si un fichier a été écrit à, pour cela vous devez utiliser quelque chose de spécifique au système d'exploitation, comme sur Linux, vous pouvez utiliser inotify.
je comprends la première partie de votre commentaire. Mais je pensais que le but de la sélection sur un socket a été fondamentalement juste à l'écoute lorsque les données ont été écrites à la socket. Comment est-il différent d'un fichier?

OriginalL'auteur glutz | 2012-08-10