Votre expérience des fifo

oeuf -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut,

j'aimerais savoir dans quels cas vous avez été contraint d'avoir recours à un fifo parce qu'un fichier régulier ne pouvait en aucun cas faire l'affaire

j'imagine de plus en plus que ça n'a de sens que pour l'acheminement d'un flux de données, mais outre en multimédia, j'ai du mal à concevoir les cas, en administration système en particulier, où l'utilisation d'un fifo est obligatoire

merci

4 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Les tubes (ou pipelines) - anglais pipe - permettent la communication inter-processus. Le caractère | (ALTGR - pour clavier AZERTY) est utilisé pour réalisé ça guide d utilisation du shell pour debutant#xxx les redirections et les pipelines
    Les tubes sont des cannaux anonymes.

    Les tubes nommés (named pipe) sont des fichiers spéciaux équivalents des tubes qui se trouvent dans /dev. On peut les créer avec mknod et mkfifo (voir man mknod et man mkfifo).

    Il ne s'agit pas de fait que c'est obligatoire ou pas, mais pour faire communiquer les processus il faut les utiliser, c'est pour ça qu'ils sont présentent dans le système.

    Exemple avec pipe |

    commande 1 (sortie) | commande2 (lecture de la comande1)

    - conversion des pages man en pdf
     man -t bash | ps2pdf - > bash.pdf

    1. man -t bash - formatage de la page man bash selon le format (troff ou groff) et dirigé vers l'imprimante nommé "ps"
    2. le tube | permets de transférer le résultat vers la commande
    3. ps2pdf - qui va convertir en pdf
    4. la rédirection > permet de dirigé le résultat vers un fichier qu'on l'appelle bash.pdf

    Exemple avec tubes nommés

    - création du tube nommé
    - écriture dans le tube nommé
    - lecture depuis le tube nommé
    - suppression du tube nommé
    lami20j@deb:~$ jobs
    lami20j@deb:~$ mkfifo -m 0755 /tmp/tempfifo
    lami20j@deb:~$ ls -l /tmp/tempfifo
    prwxr-xr-x 1 lami20j lami20j 0 2007-09-09 10:10 /tmp/tempfifo
    lami20j@deb:~$ ls trash/ > /tmp/tempfifo&
    [1] 8766
    lami20j@deb:~$ jobs
    [1]+  Running                 ls --color=auto trash/ >/tmp/tempfifo &
    lami20j@deb:~$ cat < /tmp/tempfifo
    ccm.pl
    ccm.sh
    dico_en.txt
    dico_fr.txt
    fic
    fichier
    fifoccm
    karinn.pl.orig
    piccolupo
    resultat
    tac
    [1]+  Done                    ls --color=auto trash/ >/tmp/tempfifo
    lami20j@deb:~$ jobs
    lami20j@deb:~$ rm -v /tmp/tempfifo
    détruit `/tmp/tempfifo'
    lami20j@deb:~$ ls -l /tmp/tempfifo
    ls: /tmp/tempfifo: Aucun fichier ou répertoire de ce type
    lami20j@deb:~$

    0
  2. oeuf
     
    :D

    merci lami20j, mais ce qui m'intéresse surtout n'est pas leur fonctionnement (j'ai des pipes dans tous les coins de mes shell scripts) mais surtout les utilisations que les gens font des tubes nommés. Des cas pratiques, en quelque sorte. Les principes ça baigne :)
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Un exemple peut être les applications client/serveur pour établir le dialogue entre le client et le serveur.

    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    Hello
    j'exécute une commande sur machine1 et je veux traiter la sortie sur machine2 mais je n'ai pas ou je ne veux pas d'accès direct (rsh ou ssh) mais j'ai un répertoire partagé:

    mkfifo /net/dir/fifo
    sur machine1 : commande > /net/dir/fifo
    sur machine2 : autrecommande < /net/dir/fifo
    0