IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

savoir si un tube est vide ou non


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 84
    Points : 61
    Points
    61
    Par défaut savoir si un tube est vide ou non
    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 !!!

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 84
    Points : 61
    Points
    61
    Par défaut
    bon j'ai oublie de preciser que j ai besoin d utilise un tube non nomme, et aussi je programme avec C sous linux

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    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

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hisoka_Hunter Voir le message
    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 !!!
    Tu peux tenter le read en mode O_NONBLOCK puis vérifier avec errno si la "non-lecture" est due à un tube vide ou pas.

  6. #6
    Membre éprouvé
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Points : 1 122
    Points
    1 122
    Par défaut
    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.

Discussions similaires

  1. [\ifx] Test sur un paramètre pour savoir s'il est vide ou non
    Par niko60 dans le forum Programmation (La)TeX avancée
    Réponses: 1
    Dernier message: 01/10/2014, 16h21
  2. [SP-2010] Savoir si un dossier est vide ou non
    Par sebfreu dans le forum SharePoint
    Réponses: 1
    Dernier message: 13/02/2012, 10h46
  3. Verifier si le textarea est vide ou non
    Par marsupilami34 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/02/2009, 07h44
  4. comment savoir si un recordset est vide ?
    Par alkmehd dans le forum Access
    Réponses: 6
    Dernier message: 15/09/2005, 14h56
  5. [Access] Comment savoir qu'un champs est vide ?
    Par Oberown dans le forum ASP
    Réponses: 9
    Dernier message: 25/10/2004, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo