interrogation du descripteur de fichier

J’ai créé un programme suivant dans lequel je souhaite interroger le descripteur de fichier du fichier que j’ouvre dans le programme.

#define FILE "help" int main() { int ret1; struct pollfd fds[1]; ret1 = open(FILE, O_CREAT); fds[0].fd = ret1; fds[0].events = POLLIN; while(1) { poll(fds,1,-1); if (fds[0].revents & POLLIN) printf("POLLING"); } return 0; } 

Il va en boucle infinie. Je m’attends à exécuter la boucle quand une opération arrive au fichier. (C’est un fichier ASCII) Aide plz

poll() ne fonctionne pas sur les fichiers ouverts. Comme une read() sur un fichier ne sera jamais bloquée, poll() renverra toujours que vous pouvez lire le fichier sans blocage.

Cela fonctionnerait (ou presque) sur les périphériques de caractères *, nommés pipes ** ou sockets, car ceux-ci bloquent lorsque vous read() partir d’eux quand aucune donnée n’est disponible. (vous devez également lire ces données à ce moment-là, sinon le sondage vous dira encore et encore que des données sont disponibles)

Pour “interroger” un fichier en croissance / en diminution, voyez man inotify ou implémentez votre propre interrogation en utilisant fstat() dans une boucle.

* les périphériques de bloc sont une histoire à part; Bien que techniquement une lecture depuis un disque dur puisse bloquer pendant 10 ms ou plus, cela n’est pas perçu comme un blocage des E / S sous Linux.
** Voir aussi comment vider un tube nommé en utilisant bash

Aucune idée si cela est la cause de vos problèmes (probablement pas), mais c’est une idée particulièrement mauvaise de redéfinir la macro standard FILE . Votre compilateur ne s’est-il pas plaint de cela?