[C] tester si un descripteur à été modifié

tester si un descripteur à été modifié [C] - C - Programmation

Marsh Posté le 23-12-2004 à 17:36:08    

Je souhaite tester si un descripteur à été modifié j'avais pensé tout d'abord à un select mais il teste si le descripteur est modifié pendant un temps donné. Or je souhaiterais scruter le descripteur à un interval donné pour voir si celui-ci à été modifié depuis la dernière fois.
 
la structure donnerait cela:
 
while(1){
    test=regarder(descripteur);
    if(test){
       ...
    }
}
 
Voila, si vous avez une idée sur la fonction à utiliser (ps je suis sous linux).
En tout cas merci de toute aide :hello:


---------------
Et toi, tu crois que les ours polaires vont chier dans les bois ?
Reply

Marsh Posté le 23-12-2004 à 17:36:08   

Reply

Marsh Posté le 23-12-2004 à 17:45:37    

Je peux me tromper, mais il me semble qu'il te faudrait regarder directement le fichier avec utime( nom_fichier, &struct_utimbuf )
La structure passé en paramètre contient alors le dernier temps d'accès et le dernier temps de modification.  

Reply

Marsh Posté le 23-12-2004 à 17:49:14    

Aprés vérification la fonction est stat, par contre je suis désolé j'avais oublié de préciser que c'était pour tester la modification sur un pipe et non un fichier :sweat:
 
En clair je cherche à tester si un pipe à été rempli ou non


Message édité par nodus le 23-12-2004 à 17:51:43

---------------
Et toi, tu crois que les ours polaires vont chier dans les bois ?
Reply

Marsh Posté le 23-12-2004 à 20:41:20    

Si c'est un tube nommé (un fifo) c'est un fichier, il a donc un inode où stat() va chercher les informations, de meme normalement, pour utime() à qui il suffit de transmettre un second argument non NULL si on veut consulter l'inode.

Reply

Marsh Posté le 23-12-2004 à 22:15:52    

fstat() plutôt, non ? Ca évite de se casser la tête avec le nom de fichier s'il est déjà ouvert.
Sinon, poll() doit pouvoir faire l'affaire pour un pipe...
 

Reply

Marsh Posté le 24-12-2004 à 03:39:32    

Si tu fais des essais avec ls -lc tu verra que la date est changée quand les données sont lues, pas quand elles sont écrites. Donc a mon avis ton truc c'est impossible en se basant sur la date.
 
Pourquoi veux-tu savoir s'il y a quelque chose dans le pipe sans le lire ?


Message édité par matafan le 24-12-2004 à 03:39:46
Reply

Marsh Posté le 24-12-2004 à 15:47:14    

Car s'il y a quelquechose le prog lancera une action, un read est bloquant or je cherche une fonction qui serait non bloquante. Le poll pourrait il faire l'affaire ?


---------------
Et toi, tu crois que les ours polaires vont chier dans les bois ?
Reply

Marsh Posté le 31-12-2004 à 11:26:23    


Read n'est pas bloquant... il peut sortir s'il n'a rien à lire. Il faut mettre le fd en non bloquant O_NONBLOCK.
 
un sleep, un read, il retourne -1 et errno == EAGAIN tu continues, y'avais rien à lire.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed