Provided by: manpages-nl-dev_4.15.0-9_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>              /* Definitie van O_* constanten */
       #include <unistd.h>

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

BESCHRIJVING

       De  dup()  systeem aanroep wijst een nieuwe bestandsindicator toe die wijst naar hetzelfde
       open  bestandsindicator  als  de  indicator  oudebi.  (Voor  een  uitleg  over   de   open
       bestandsindicatoren,  zie  open(2).) Het nieuwe bestandsindicator getal is gegarandeerd de
       laagst genummerde bestandsindicator die ongebruikt was in het aanroepende proces.

       Na een geslaagde terugkeer  zijn  de  oude  en  nieuwe  bestandsindicatoren  uitwisselbaar
       (gelijk).  Omdat  de twee bestandsindicatoren naar dezelfde open bestandsindicator wijzen,
       delen ze dezelfde bestands positie en de bestands status vlaggen; bij  voorbeeld,  als  de
       bestandspositie   werd   gewijzigd   door   lseek(2)   te  gebruiken  op  de  een  van  de
       bestandsindicatoren, dan is de positie ook gewijzigde in de andere bestandsindicator.

       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.  Met  andere  woorden,  de
       bestandsindicator  nieuwebi  wordt  aangepast  zodat  deze  nu  wijst  naar  dezelfde open
       bestandsindicator als oudebi.

       Als de bestandsindicator nieuwebi eerder open was, dan wordt  deze  gesloten  voordat  hij
       wordt  hergebruikt; het sluiten gebeurd stilzwijgend (m.a.w. opgetreden fouten tijdens het
       sluiten worden niet gerapporteerd door dup2()).

       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(nieuwebi);
           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.13  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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.