Provided by: manpages-nl-dev_4.13-4_all bug

NAAM

       pipe, pipe2 - maak pipe

SAMENVATTING

       #include <unistd.h>

       /* OnpAlpha, IA-64, MIPS, SuperH, and SPARC/SPARC64; zie NOTITIES */
       struct fd_pair {
       long fd[2];
       };
       struct fd_pair pipe();

       /* Op alle andere architecturen */
       int pipe(int pipefd[2]);

       #define _GNU_SOURCE             /* Zie feature_test_macros(7) */
       #include <fcntl.h>              /* Verkrijg O_* constanten definities */
       #include <unistd.h>

       int pipe2(int pipe_bes_ind[2], int vlaggen);

BESCHRIJVING

       pipe()   maakt  een  pijp aan: een uni-directioneel data kanaal dat kan worden gebruikt voor interprocess
       communicatie.  Het array  pipefd wordt gebruikt om twee bestandsbeschrijving te retourneren die  naar  de
       uiteinden  van de pijp wijzen.  pipefd[0] wijst naar het lees-uiteinde van de pijp.  pipefd[1] wijst naar
       het schrijf-uiteinde van de pijp.  Data geschreven naar het schrijf-uiteinde van de pijp wordt  gebufferd
       door  de  kernel  totdat  deze  werd  gelezen  aan  het  lees-uiteinde van de pijp.  Voor verder details,
       ziepipe(7).

       Als vlaggen is 0, dan is pipe2()  hetzelfde als pipe().   De  volgende  waarden  kunnen  per  bit  worden
       geOF´ed in vlaggen om ander gedrag te verkrijgen:

       O_CLOEXEC
              Zet   de  sluit-bij-exec  (FD_CLOEXEC)   vlag  op  twee  nieuwe  bestandsbeschrijvingen.   Zie  de
              beschrijving van dezelfde vlag in open(2)  voor  redenen waarom dit bruikbaar kan zijn.

       O_DIRECT (sinds Linux 3.4)
              Maak een pijp aan die Invoer/Uitvoer in pakket modus uitvoert. Elke write(2) naar  de  pijp  wordt
              behandeld  als  een apart pakket, en read(2)s van deze pijp leest een pakket per tijdseenheid. Let
              op de volgende punten:

              *  Het schrijven van meer dan PIPE_BUF bytes (zie pipe(7) wordt gesplitst in  meerdere  pakketten.
                 De constante PIPE_BUF is gedefinieerd in <limits.h>.

              *  Als   read(2)  een  buffer  grootte opgeeft die kleiner is dan het volgende pakket, dan zal het
                 gevraagde aantal bytes worden gelezen, en zullen de overmaat aan bytes  in  het  pakket  worden
                 weggegooid.  Opgeven  van  een buffer grootte van PIPE_BUF is voldoende om de grootst mogelijke
                 pakketten te lezen (zie het voorgaande punt).

              *  Nul-lengte pakketten worden niet ondersteund. (Een read(2)  die  een  buffer  grootte  van  nul
                 opgeeft is een ongeldige operatie en geeft 0 terug.)

              Oudere kernels die deze vlag niet ondersteunen zullen dit kenbaar maken door middel van een EINVAL
              fout.

              Vanaf  Linux  4.5  is  het mogelijk om de O_DIRECT instelling van een pijp bestandsbeschrijving te
              veranderen met fcntl(2).

       O_NONBLOCK
              Stel de O_NONBLOCK bestandsstatus vlag in op de open bestandsbeschrijving aangewezen naar door een
              nieuwe bestandsbeschrijving. Het gebruiken van deze vlag bespaart extra aanroepen van fcntl(2)  om
              hetzelfde resultaat te bereiken.

EIND WAARDE

       Bij  succes wordt nul teruggegeven. Bij falen wordt -1 teruggegeven, wordt errno overeenkomstig gezet, en
       pipefd blijft ongewijzigd.

       Op Linux (en andere systemen), verandert pipe() de pipefd niet na een fout. Een  eis  om  dit  gedrag  te
       standaardiseren  werd  toegevoegd  in POSIX.1-2008 TC2. De Linux-specifieke pipe2()  systeem aanroep doet
       hetzelfde en verandert pipefd niet bij een fout.

FOUTEN

       EFAULT pipe_bes_ind is ongeldig.

       EINVAL (pipe2()) Ongeldige waarde in vlaggen.

       EMFILE De per-proces limiet van het aantal open bestandsbeschrijvingen werd bereikt.

       ENFILE De grens aan het aantal open bestanden van het systeem is bereikt.

       ENFILE De harde grens van gebruikers geheugen dat kan worden toegewezen aan pijpen  werd  bereikt  en  de
              aanroeper was niet gerechtigd; zie pipe(7).

VERSIES

       pipe2() werd toegevoegd aan Linux in versie 2.6.27; glibc ondersteuning is beschikbaar vanaf versie 2.9.

VOLDOET AAN

       pipe(): POSIX.1-2001, POSIX.1-2008.

       pipe2() is Linux-specifiek.

OPMERKINGEN

       De  Systeem  V  ABI  op sommige architecturen staat toe om meer dan een register te gebruiken om meerdere
       waarden terug te geven; verschillende architecturen

       (namelijk Alpha, IA-64, MIPS, SuperH en SPARC/SPARC64) (mis)/(ge)bruiken deze  eigenschap  om  de  pipe()
       systeem  aanroep in een functionele manier te implementeren: de aanroep gebruikt geen argumenten en geeft
       een paar  bestandsbeschrijvingen  terug  bij  succes.  De  glibc  pipe()  omwikkel  functie  handelt  dit
       transparant  af.  Zie  syscall(2)  voor informatie betreffende registers die gebruikt worden om de tweede
       bestandsbeschrijving op te slaan.

VOORBEELDEN

       Het volgende programma maakt een pijp aan, vervolgens wordt fork(2) gebruikt om een kind  proces  aan  te
       maken;  dit kind erft een dubbele set bestandsbeschrijvingen die naar dezelfde pijp wijzen. Na de fork(2)
       sluit elk proces de bestandsbeschrijving die het niet nodig heeft voor de pijp (zie pipe(7)).  Het  ouder
       proces  schrijft  vervolgens  de tekenreeks bevat in de commando regel van het programma naar de pijp, en
       het kind leest deze tekenreeks byte voor byte van de pijp en echo´ed deze naar de standaard uitvoer.

   Programma bron
       #include <sys/types.h>
       #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) {    /* kind leest van de pijp */
               close(pipefd[1]);          /* Sluit het ongebruikte schrijf-einde */

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

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

           } else {            /* Ouder schrijft argv[1] naar de pijp */
               close(pipefd[0]);          /* Sluit ongebruikt lees-einde */
               write(pipefd[1], argv[1], strlen(argv[1]));
               close(pipefd[1]);          /* Lezer zal EOF zien */
               wait(NULL);                /* Wacht op het kind */
               exit(EXIT_SUCCESS);
           }
       }

ZIE OOK

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

COLOFON

       Deze pagina is onderdeel van release 5.10 van het  Linux  man-pages-project.  Een  beschrijving  van  het
       project,  informatie  over  het  melden  van  bugs  en  de  nieuwste  versie  van  deze  pagina  zijn  op
       https://www.kernel.org/doc/man-pages/ te vinden.

VERTALING

       De Nederlandse vertaling van deze handleiding is geschreven door Jos  Boersema  <joshb@xs4all.nl>,  Mario
       Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

       Deze  vertaling  is  vrije  documentatie;  lees  de GNU General Public License Version 3 of later over de
       Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

       Indien U fouten in de vertaling van deze handleiding zou  vinden,  stuur  een  e-mail  naar  debian-l10n-
       dutch@lists.debian.org.

Linux                                              9 juni 2020                                           PIPE(2)