salut tout le monde,
alors je cherche comment savoire ci un tube sous unix (pipe) est vide ou non, genre un processus ecrit , et le pere lit, mais le pere ne lit pas si il y a pas quoi ecrire , merci !!!![]()
salut tout le monde,
alors je cherche comment savoire ci un tube sous unix (pipe) est vide ou non, genre un processus ecrit , et le pere lit, mais le pere ne lit pas si il y a pas quoi ecrire , merci !!!![]()
utilises un pipe personnel
mknod /dev/perso p
comme ca tu peux le tester avec fuser -v a l'instant t
si il est ouvert c'est que ca cause bien entre les process..
comme dans cette exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #restaurer une bande (lue dans la machine A) sur la machine B mknod /tmp/tar p cat /tmp/tar | rsh machineB "(cd /repertoire/destination ; tar -xf -)" & tcopy /dev/rmt1h /tmp/tar >/tmp/log& #plus tard tu fais pour savoir si c'est fini ou pas : fuser -v /tmp/tar > /dev/null ; if [ $? -ne 0 ] ; then echo message ; else echo messageinverse ; fi
bon j'ai oublie de preciser que j ai besoin d utilise un tube non nomme, et aussi je programme avec C sous linux![]()
pour le pipe universel je sais pas trop....
peut etre en analysant le contenu de grep PPID /proc/[numero_ID_fils]/status
doit y avoir moyen de bricoler ca proprement
Il y a soit le flag O_NONBLOCK à placer sur le file descriptor via la fonction fcntl.
Soit l'utilisation des fonctions comme select ou poll ou variante.
Cela dit, si tu place l'option O_NONBLOCK sur le file descriptor, il y a moyen de faire des choses intéressantes car tu peux demander à recevoir un SIGIO dès que des données arrivent sur le pipe ce qui te permet d'avoir une gestion totalement asynchrone de ton pipe.
Si tu cherches à ne pas bloquer sur le read quand tu n'as pas de données, je suppose que c'est parce que tu as d'autres choses à faire en attendant. Donc pourquoi ne pas utiliser des threads ?
Les threads et les select c'est les deux grandes méthodes utilisées quand on a plusieurs fd à surveiller.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager