fcntl

FCNTL(2)                 Linux Programmeurs Handleiding                 FCNTL(2)



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 $



Linux                             12 Juli 1999                          FCNTL(2)