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

NAAM

       dup, dup2, dup3 - kopieer een bestandsindicator

SAMENVATTING

       #include <unistd.h>

       int dup(int oudebi);
       int dup2(int oudebi, int nieuwebi);

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

       int dup3(int oudebi, int nieuwebi, int vlaggen);

BESCHRIJVING

       De  dup()   systeem  aanroep  maakt  een  kopie  van  de  bestandsindicator oudebi, gebruik makend van de
       laagst-genummerde niet-gebruikte bestandsindicator voor de nieuwe indicator.

       Na geslaagd terugkeren, mogen de oude en de nieuwe indicatoren door elkaar  gebruikt  worden.  Ze  wijzen
       naar  dezelfde  open  bestandsindicator  (zie  open(2))  en delen dus dezelfde bestandspositie en bestand
       status vlaggen; bij voorbeeld als de  bestandspositie  werd  gewijzigde  door  lseek(s)  op  een  van  de
       bestandsindicatoren, dan wordt de positie ook gewijzigd in de andere.

       De  twee  bestandsindicatoren  delen  de  bestandsindicator  vlag  niet  (de  sluit-bij-uitvoer vlag). De
       sluit-bij-uitvoer vlag (FD_CLOEXEC; zie fcntl(2))  voor als de duplicaat indicator uit staat.

   dup2()
       De dup2()  systeem aanroep voert dezelfde taak uit als dup(), maar in plaats van  het  gebruiken  van  de
       laagst-genummerde  niet  gebruikte  bestandsindicator,  gebruikt  deze het bestandsindicator nummer zoals
       gespecificeerd  in  nieuwebi.  Als  de  bestandsindicator  nieuwebi  eerder  open  was,  dan  wordt  deze
       stilzwijgend gesloten voor dat hij wordt hergebruikt.

       De  stappen  van het sluiten en hergebruiken van de bestandsindicator nieuwebi worden atomair uitgevoerd.
       Dit is belangrijk, want het implementeren van equivalente functionaliteit door het gebruik  van  close(2)
       en  dup()  zou een race conditie kunnen inhouden, waardoor nieuwebi zou kunnen worden geweigerd tussen de
       twee stappen. Zulk hergebruik kan optreden wanneer een hoofdprogramma wordt onderbroken door een  signaal
       afhandelaar  die  een  bestandsindicator  toekent,  of  omdat een parallelle thread een bestandsindicator
       toekent.

       Let op de volgende punten:

       *  Als oudebi is geen geldige bestandsindicator, dan  zal  de  aanroep  falen,  en  nieuwebi  wordt  niet
          gesloten.

       *  Als  oudebi  een  geldige bestandsindicator is, en nieuwebi heeft dezelfde waarde als oudebi, dan doet
          dup2() niets, en retourneert nieuwebi.

   dup3()
       dup3()  is hetzelfde als dup2(), met uitname van:

       *  De aanroeper kan het zetten van een sluit-bij-uitvoer vlag forceren  voor een nieuwe bestandsindicator
          door O_CLOEXEC  te specificeren in flags. Zie de beschrijving van dezelfde vlag in open(2) met redenen
          waarom dit nuttig is.

       *  Als  oudebi gelijk is aan nieuwebi, dan faalt dup3()  met de fout EINVAL.

EIND WAARDE

       Bij succes, retourneren deze systeem aanroepen  de  nieuwe  bestandsindicator.  Bij  een  fout  wordt  -1
       teruggegeven, en errno wordt overeenkomstig gezet om de fout te aan te geven.

FOUTEN

       EBADF  oudebi is geen open bestandindicator.

       EBADF  nieuwebi  ligt  buiten  de  toegestane  waardes  voor  bestandsindicators.  (zie de discussie over
              RLIMIT_NOFILE in getrlimit(2)).

       EBUSY  (Alleen Linux) Dit kan worden teruggegeven door dup2() of dup3 gedurende  een  race  conditie  met
              open(2) en dup().

       EINTR  De dup2() of dup3() aanroep werd onderbroken door een signaal; zie signal(7).

       EINVAL (dup3())  flags bevatten een ongeldige waarde..

       EINVAL (dup3())  oudebi was gelijk aan nieuwebi.

       EMFILE De  per-proces  limiet  van  het aantal open bestandsindicatoren is bereikt (zie de discussie over
              RLIMIT_NOFILE in getrlimit(2)).

VERSIES

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

VOLDOET AAN

       dup(), dup2(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

       dup3()  is Linux-specifiek.

OPMERKINGEN

       De teruggegeven fout door dup2() is anders dan die  zoals  teruggegeven  door  fcntl(...,  F_DUPFD,  ...)
       wanneer  nieuwebi  buiten  bereik  is.   Op sommige  systemen, retourneert dup2()  ook soms  EINVAL zoals
       F_DUPFD.

       Als nieuwebi open was, dan zullen fouten  die  gerapporteerd  zouden  worden  tijdens  close(2)  verloren
       geraakt   zijn.   Als   dit  een  zorg  is,  —behalve  als  het  programma  single-threaded  is  en  geen
       bestandsindicatoren in signaal afhandelaren alloceert)\m dan is de correcte aanpak om de nieuwebi niet te
       sluiten dup2(), vanwege  de  race  conditie  zoals  hierboven  beschreven.   In  plaats  daarvan  zou  de
       bijvoorbeeld de hieronder gegeven code gebruikt kunnen worden:

           /* Gebruik een duplicaat van 'nieuwebi' die achtereenvolgens gebruikt
              kan worden om te controleren op close() fouten; een EBADF fout
              betekent dat 'nieuwebi' niet open was. */

           tmpfd = dup(newfd);
           if (tmpfd == -1 && errno != EBADF) {
               /* Handel onverwachte dup() fout af */
           }

           /* Atomair duplicaat 'oudebi' aan 'nieuwebi'. */

           if (dup2(oudebi, nieuwebi) == -1) {
               /* Handel dup2() fout af */
           }

           /* Controleer nu op close() fouten in het originele bestand
              aangewezen door 'nieuwebi'. */

           if (tmpfd != -1) {
               if (close(tmpfd) == -1) {
                   /* Handel fouten van close af. */
               }
           }

ZIE OOK

       close(2), fcntl(2), open(2), pidfd_getfd(2)

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                                            1 november 2020                                          DUP(2)