pipe   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (2)
Updated: 9 janvier 2008
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
pipe - Créer un tube  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#include <unistd.h>

int pipe(int pipefd[2]);  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
pipe() crée un tube, un canal unidirectionnel de données qui peut être utilisé pour la communication interprocessus. Le tableau pipefd est utilisé pour renvoyé deux descripteurs de fichiers faisant référence aux extrémités du tube. pipefd[0] fait référence à l'extrémité lecture du tube. pipefd[1] fait référence à l'extrémité écriture du tube. Les données écrites sur l'extrémité écriture du tube sont mises en mémoire tampon par le noyau jusqu'à ce qu'elles soient lues sur l'extrémité lecture du tube. Pour plus de détails, voir pipe(7).  



VALEUR RENVOYÉE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
pipe() renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas errno contient le code d'erreur.  



ERREURS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
EFAULT
pipefd est invalide.
EMFILE
Trop de descripteurs de fichiers sont utilisés par le processus.
ENFILE
La limite du nombre total de fichiers ouverts sur le système a été atteinte.
 



CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
POSIX.1-2001.  



EXEMPLE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Le programme suivant crée un tube puis se dédouble (fork(2)) pour créer un processus fils. Le processus fils hérite d'un ensemble dupliqué de descripteurs de fichiers qui font référence au même tube. Après le fork(2), chaque processus ferme les descripteurs dont il n'a pas besoin pour le tube (voir pipe(7)). Le père écrit la chaîne contenue dans l'argument de la ligne de commande du programme et le fils lit cette chaîne, un octet à la fois, qu'il affiche sur sa sortie standard.

#include <sys/wait.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int
main(int argc, char *argv[])
{
    int pipefd[2];
    pid_t cpid;
    char buf;

    assert(argc == 2);

    if (pipe(pipefd) == -1) {
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    cpid = fork();
    if (cpid == -1) {
        perror("fork");
        exit(EXIT_FAILURE);
    }

    if (cpid == 0) {    /* Le fils lit dans le tube */
        close(pipefd[1]);  /* Ferme l'extrémité écriture inutilisée */

        while (read(pipefd[0], &buf, 1) > 0)
            write(STDOUT_FILENO, &buf, 1);

        write(STDOUT_FILENO, "\n", 1);
        close(pipefd[0]);
        _exit(EXIT_SUCCESS);

    } else {                    /* Le père écrit argv[1] dans le tube */
        close(pipefd[0]);       /* Ferme l'extrémité lecture inutilisée */
        write(pipefd[1], argv[1], strlen(argv[1]));
        close(pipefd[1]);       /* Le lecteur verra EOF */
        wait(NULL);             /* Attente du fils */
        exit(EXIT_SUCCESS);
    }
}
 



VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
fork(2), read(2), socketpair(2), write(2), popen(3), pipe(7)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 10 octobre 1996 et révisée le 14 janvier 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 pipe ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
EXEMPLE
VOIR AUSSI
TRADUCTION

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EFAULTERREURS
EMFILEERREURS
ENFILEERREURS



Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:48:50, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional