tester si un descripteur à été modifié [C] - C - Programmation
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.
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
En clair je cherche à tester si un pipe à été rempli ou non
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.
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...
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 ?
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 ?
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.
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
---------------
Et toi, tu crois que les ours polaires vont chier dans les bois ?