Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       pipe, pipe2 - Creer un tube

SYNOPSIS

       #include <unistd.h>

       int pipe(int pipefd[2]);

       #define _GNU_SOURCE             /* Consultez feature_test_macros(7) */
       #include <unistd.h>

       int pipe2(int pipefd[2], int flags);

DESCRIPTION

       pipe()  cree un tube, un canal unidirectionnel de donnees qui peut etre
       utilise pour la communication entre processus. Le  tableau  pipefd  est
       utilise pour renvoye deux descripteurs de fichier faisant reference aux
       extremites du tube. pipefd[0] fait reference a l'extremite  de  lecture
       du tube. pipefd[1] fait reference a l'extremite d'ecriture du tube. Les
       donnees ecrites sur  l'extremite  d'ecriture  du  tube  sont  mises  en
       memoire  tampon  par  le  noyau  jusqu'a  ce  qu'elles  soient lues sur
       l'extremite de  lecture  du  tube.  Pour  plus  de  details,  consultez
       pipe(7).

       Si  flags  est  nul,  alors pipe2() est identique a pipe(). Les valeurs
       suivantes peuvent etre incluses a l'aide d'un  OU  binaire  dans  flags
       pour obtenir differents comportements :

       O_NONBLOCK  Placer l'attribut d'etat de fichier O_NONBLOCK sur les deux
                   nouveaux descripteurs de  fichiers  ouverts.  Utiliser  cet
                   attribut  economise  des  appels supplementaires a fcntl(2)
                   pour obtenir le meme resultat.

       O_CLOEXEC   Placer l'attribut << close-on-exec >> (FD_CLOEXEC) sur  les
                   deux   nouveaux  descripteurs  de  fichiers.  Consultez  la
                   description  de  cet  attribut  dans  open(2)  pour  savoir
                   pourquoi ca peut etre utile.

VALEUR RENVOY'EE

       S'il  reussit,  cet appel systeme renvoie 0. S'il echoue, il renvoie -1
       et remplit errno en consequence.

ERREURS

       EFAULT pipefd est invalide.

       EINVAL (pipe2()) Valeur incorrecte dans flags.

       EMFILE Trop de descripteurs de fichier sont utilises par le processus.

       ENFILE La limite du nombre total de fichiers ouverts sur le  systeme  a
              ete atteinte.

VERSIONS

       pipe2()  a  ete  ajoute  a  Linux  dans la version 2.6.27 ; sa prise en
       charge par la glibc est disponible depuis la version 2.9.

CONFORMIT'E

       pipe() : POSIX.1-2001.

       pipe2() est specifique a Linux.

EXEMPLE

       Le programme suivant cree un tube, puis invoque fork(2) pour  creer  un
       processus fils ; le fils herite d'un jeu de descripteurs de fichier qui
       se rapportent au meme tube. Apres le fork(2),  chaque  processus  ferme
       les  descripteurs  dont  il  n'a  pas  besoin  pour  le tube (consultez
       pipe(7)). Le pere ecrit alors la chaine  contenue  dans  l'argument  de
       ligne  de  commande  du  programme  dans  le tube, et le fils lit cette
       chaine un octet a la fois dans le tube,  et  l'affiche  sur  la  sortie
       standard.

       #include <sys/wait.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;

           if (argc != 2) {
            fprintf(stderr, "Usage: %s <string>\n", argv[0]);
            exit(EXIT_FAILURE);
           }

           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]);          /* Fermeture du descripteur en ecriture inutilise */

               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 pere ecrit argv[1] dans le tube */
               close(pipefd[0]);          /* Fermeture du descripteur en lecture inutilise*/
               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

       fork(2), read(2), socketpair(2), write(2), popen(3), pipe(7)

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/> (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).    Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.