Provided by: manpages-nl-dev_4.21.0-2_all 

NAAM
dup, dup2, dup3 - kopieer een bestandsindicator
BIBLIOTHEEK
Standard C bibliotheek (libc, -lc)
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 2.6.27; glibc ondersteuning is beschikbaar vanaf glibc 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)— 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)
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 man-pagina's 6.03 5 februari 2023 dup(2)