Provided by:
manpages-nl_20051127-1_all 
NAAM
fcntl - manipuleer bestandindicator
OVERZICHT
#include <unistd.h>
#include <fcntl.h>
int fcntl(int bi, int opd);
int fcntl(int bi, int opd, long arg);
int fcntl(int bi, int opd, struct flock * grendel);
BESCHRIJVING
fcntl voert 1 van verschillende opdrachten uit op bi. De betreffende
opdracht wordt bepaald door opd:
F_DUPFD {kopieer bi} Vind de laagst genummerde beschikbare
bestandindicator groter of gelijk aan arg en maak het een
kopie van bi. Dit is een andere vorm van dup2(2) die {dup2}
precies de bestandindicator die opgegeven wordt gebruikt.
De oude en nieuwe beschrijvers mogen uitwisselbaar gebruikt
worden. Ze delen grendels, bestand positie pointers en
vlaggen; bijvoorbeeld: als de bestand positie veranderd wordt
met lseek voor 1 van de beschrijvers dan is de positie ook
veranderd voor de andere.
De twee beschrijvers delen echter niet de sluit-bij-uitvoering
vlag. De sluit-bij-uitvoering vlag van de kopie is uit, wat
betekend dat hij niet gesloten wordt bij uitvoering.
Bij success wordt de nieuwe beschrijver teruggegeven.
F_GETFD {krijg bi} Lees de sluit-bij-uitvoering vlag. Als het
FD_CLOEXEC {sluit-bij-uitvoeren} bit 0 is, zal het bestand
open blijven door een exec heen, anders zal het gesloten
worden.
F_SETFD {zet vlag} Zet de sluit-bij-uitvoering vlag naar de waarde
bepaald door het FD_CLOEXEC bit van arg.
F_GETFL {krijg vlaggen} Lees de beschrijvers vlaggen (alle vlaggen
(zoals gezet door open(2)) worden teruggegeven).
F_SETFL {zet vlaggen} Zet de beschrijvers vlaggen naar de waarde
bepaald door arg. Alleen O_APPEND {toevoegen}, O_NONBLOCK
{niet blokkeren} en O_ASYNC {niet-gelijktijdig} mogen gezet
worden; de andere vlaggen blijven onaangeroerd.
De vlaggen worden gedeeld door kopieen (gemaakt met dup(2),
fork(2), enz.) van dezelfde bestandindicator.
De vlaggen en hun woordbetekenissen worden beschreven in
open(2).
F_GETLK {krijg grendel}, F_SETLK {zet grendel} en F_SETLKW {zet grendel
wacht} worden gebruikt om in-overeenstemming-bestand-grendels te
beheren. Het derde argument lock is een pointer naar een "struct
flock" {structuur f grendel}. (die kan worden overschreven door deze
aanroep).
F_GETLK
{krijg grendel} Geef de "flock" structuur die ons weerhoudt van
het krijgen van de grendel, of zet het l_type veld van de
grendel naar F_UNLCK {open-grendel} als er geen beletsel is.
F_SETLK
{zet grendel} De grendel wordt gezet (als l_type, F_RDLCK {lees
grendel} of F_WRLCK {schrijf grendel} is) of gewist (wanneer het
F_UNLCK {open-slot} is). Als de grendel van iemand anders is,
geeft deze aanroep -1 terug en zet errno naar EACCES {toegang}
of EAGAIN {nogmaals}.
F_SETLKW
{zet grendel wacht} Net als F_SETLK, {zet grendel} maar in
plaats van een fout teruggevend wachten we tot de grendel open
gaat. Als een signaal dat afgevangen zal worden ontvangen wordt
terwijl fcntl aan het wachten is, wordt het onderbroken en
(nadat de signaal behandelaar terugkeerde) keert het
onmiddellijk terug (met teruggave van waarde -1 en wordt errno
gezet naar EINTR {onderbroken}).
F_GETOWN {krijg eigen}, F_SETOWN {zet eigen}, F_GETSIG {krijg signaal}
en F_SETSIG {zet signaal} worden gebruikt om In/Uit beschikbaarheids
signalen te beheren:
F_GETOWN
{krijg eigen} Krijg het proces ID of proces groep, momenteel
SIGIO en SIGURG ontvangend voor gebeurtenissen met de
bestandindicator bi. Proces groepen worden teruggegeven als
negatieve waardes.
F_SETOWN
{zet eigen} Zet het proces ID of de proces groep die de SIGIO en
SIGURG signalen zal ontvangen voor gebeurtenissen met de
bestandindicator bi. Proces groepen worden gegeven als
negatieve waardes. (F_SETSIG {zet sign.} kan gebruikt worden om
een ander signaal op te geven in plaats van SIGIO.)
Als je de O_ASYNC {niet-gelijktijdig} vlag op een
bestandindicator zet (of door deze vlag met de open(2) aanroep
te leveren, of met gebruik van de F_SETFL {zet vlaggen} opdracht
van fcntl), dan zal een SIGIO signaal gezonden worden telkens
wanneer invoer of uitvoer mogelijk wordt voor die
bestandindicator.
Het proces of de proces groep die het signaal zal ontvangen kan
gekozen worden met gebruik van de F_SETOWN opdracht van de fcntl
functie. Als een bestandindicator een socket is, dan bepaald dit
ook de ontvanger van SIGURG signalen die afgeleverd worden
wanneer "out-of-band" {buiten band} gegevens aankomen op het
socket. (SIGURG wordt gezonden en elke situatie waar select(2)
zou rapporteren dat het socket in een aparte toestand verkeerd
{"exceptional condition"}.)
Als de bestandindicator overeenkomt met een terminal
{"terminal"} apparaat, dan worden SIGIO signalen naar de
voorgrond proces groep van het terminal gezonden.
F_GETSIG
{krijg signaal} Krijg het signaal toegezonden wanneer invoer of
uitvoer mogelijk wordt. Een waarde van nul betekend dat SIGIO
gezonden wordt. Elke andere waarde (inclusief SIGIO) wordt in
plaats daarvan het gezonden signaal, en in dit geval worden
extra informatie beschikbaar voor de signaal behandelaar als die
geïnstalleerd werd met SA_SIGINFO.
F_SETSIG
{zet signaal} Zet het verzonden signaal voor wanneer invoer of
uitvoer mogelijk wordt. Een waarde van nul betekend het
standaard {eng: default} SIGIO signaal. Elke andere waarde
(inclusief SIGIO) wordt in plaats daarvan het verzonden signaal,
en in dit geval worden extra informatie beschikbaar voor de
signaal behandelaar als die geïnstalleerd werd met SA_SIGINFO.
Door F_SETSIG te gebruiken met een niet-nul waarde, en
SA_SIGINFO voor de signaal behandelaar te zetten (zie
sigaction(2)), worden extra informatie over In/Uit
gebeurtenissen aan de behandelaar gegeven in een siginfo_t
structuur. Als het si_code veld aangeeft dat de bron SI_SIGIO
is, dan geeft het si_fd veld de bestandindicator die verbonden
is met de gebeurtenis. Anders zijn er geen mogelijkheden om te
achterhalen welke bestandindicators wachten, en moet je de
gebruikelijke (select(2) {kies}, poll(2) {raadpleeg}, read(2)
{lees} mechanismes gebruiken met O_NONBLOCK {niet blokkeer}
gezet enz.) om te bepalen welke bestandindicators beschikbaar
zijn voor In/Uit.
Door het kiezen van een POSIX.1b echte-tijd signaal (waarde >=
SIGRTMIN) kunnen meerdere In/Uit gebeurtenissen in een wachtrij
gezet worden met gebruik van dezelfde signaal nummers. (In-een-
wachtrij-zetten is afhankelijk van het beschikbare geheugen).
Extra informatie zijn voorhanden als SA_SIGINFO gezet is voor de
signaal behandelaar, net als boven.
Gebruik makend van deze mechanismes kan een programma een volledig
ongelijktijdige {"asynchronous"} In/Uit verwezijnlijken zonder meestal
select(2) of poll(2) te gebruiken.
Het gebruik van O_ASYNC, F_GETOWN, F_SETOWN is eigen aan BSD en Linux.
F_GETSIG en F_SETSIG zijn Linux-eigen. POSIX heeft ongelijktijdige
In/Uit en de aio_sigevent structuur om soortgelijke dingen te bereiken;
deze zijn ook voorhanden in Linux, als onderdeel van de GNU C
bibliotheek (Glibc).
TERUGGEEF WAARDE
Bij een geslaagde aanroep hangt de terugkeer-waarde af van de operatie:
F_DUPFD De nieuwe beschrijver.
F_GETFD Waarde van vlag.
F_GETFL Waarde van vlaggen.
F_GETOWN Waarde van beschrijver eigenaar.
F_GETSIG Waarde van verzonden signaal wanneer lees of schrijf mogelijk
wordt, of nul voor het traditionele SIGIO gedrag.
Alle ander opdrachten
Nul.
Bij falen wordt -1 teruggegeven en errno wordt naar behoren gezet.
FOUTEN
EACCES {toegang} Opdracht wordt verboden door grendels van andere
processen.
EAGAIN {opnieuw} Opdracht wordt verboden omdat het bestand door een
ander proces in geheugen-kaart {"memory-directorieped"} is
gebracht.
EBADF {slechte bi} bi is niet een open bestandindicator.
EDEADLK {patstelling} Het werd bemerkt dat de opgegeven F_SETLKW
opdracht een patstelling zou veroorzaken.
EFAULT {fout} grendel ligt buiten door u toegankelijke adres ruimte.
EINTR {onderbroken} Voor F_SETLKW, de opdracht werd onderbroken door
een signaal. Voor F_GETLK en F_SETLK, de opdracht werd
onderbroken door een signaal voordat de grendel werd getest of
verkregen. Zeer waarschijnlijk tijdens het vergrendelen van
een op-afstand {"remote"} bestand (grendelen over NFS), maar
kan soms ook locaal {"local"} gebeuren.
EINVAL {ongeldig} Voor F_DUPFD, arg is negatief of is groter dan de
maximum toegestane waarde. Voor F_SETSIG, arg is niet een
toegestaan signaal nummer.
EMFILE {max bestand} Voor F_DUPFD, het proces heeft al het maximum
aantal bestandindicators open.
ENOLCK {geen grendel} Teveel segment grendels open, grendel tabel is
vol, of een op-afstand protocol faalde (o.a. grendelen over
NFS).
EPERM {toestemming} Geprobeerd om de O_APPEND vlag te wissen op een
bestand dat de alleen-toevoegen {"append-only"} eigenschap
gezet heeft
OPMERKINGEN
De fouten teruggegeven door dup2 zijn verschillend van die teruggegeven
door F_DUPFD.
VOLDOET AAN
SVr4, SVID, POSIX, X/OPEN, BSD 4.3. Alleen de opdrachten F_DUPFD,
F_GETFD, F_SETFD, F_GETFL, F_SETFL, F_GETLK, F_SETLK en F_SETLKW worden
opgegeven door POSIX.1. F_GETOWN en F_SETOWN zijn BSD-ismes, niet
ondersteund in SVr4; F_GETSIG en F_SETSIG zijn eigen aan Linux. De
vlaggen legaal voor F_GETFL/F_SETFL zijn die, ondersteund door open(2)
en ze wisselen tussen deze systemen; O_APPEND, O_NONBLOCK, O_RDONLY, en
O_RDWR worden opgegeven door POSIX.1. SVr4 ondersteund verschillende
andere keuzes en vlaggen niet hier beschreven.
SVr4 beschrijft extra EIO, ENOLINK en EOVERFLOW fouttoestanden.
ZIE
dup2(2) {verdubbel}, flock(2) {vergrendel}, open(2) {open}, socket(2)
VERTALING
Dit is een handleiding uit manpages-dev 1.29.
Alles wat tussen ‘{’..‘}’ staat is aanvullende vertaling, en hoort niet
bij de originele handleiding. Email naar <manpages-nl@nl.linux.org>.
$Id: fcntl.2,v 1.1.1.1 2004/03/21 21:02:25 cor Exp $