open

OPEN(2)                        Systeem aanroepen                       OPEN(2)



NAAM
       open, creat - openen (en mogelijk maken) van een bestand of apparaat

OVERZICHT
       #include <sys/types.h>
       #include <sys/stat.h>
       #include <fcntl.h>

       int open(const char *padnaam, int vlaggen);
       int open(const char *padnaam, int vlaggen, mode_t mode);
       int creat(const char *padnaam, mode_t mode);

BESCHRIJVING
       De open() systeem aanroep wordt gebruikt om een padnaam om te zetten in
       een bestandindicator (een klein, niet negatief geheel getal, dat
       gebruikt kan worden in In/Uit zoals met read(2), write(2), enz.).
       Wanneer de aanroep slaagt, wordt de bestandindicator teruggegeven met
       het laagste nummer dat niet door het proces wordt gebruikt op dat
       moment. Deze aanroep maakt een bestand open dat niet gedeeld wordt met
       andere processen. (Maar gedeelde open bestanden kunnen ontstaan door de
       fork(2) systeem aanroep.)  Voor de nieuwe bestandindicator staat `aan'
       dat hij open blijft dóór exec* functies heen.  (zie fcntl(2)) De
       bestand-positie wordt naar het begin van het bestand gezet.

       vlaggen Kan `O_RDONLY', `O_WRONLY' of `O_RDWR' zijn, respectievelijk:
       open het bestand voor alleen-lezen, alleen-schrijven of lezen-én-
       schrijven.

       vlaggen Mag ook een bitsgewijze of zijn van één of meer van het
       volgende:

       O_CREAT
              {maak} Als een bestand met dezelfde naam nog niet bestaat, dan
              wordt het gemaakt.

       O_EXCL {uitsluiten} Wanneer gebruikt met O_CREAT en als het bestand al
              bestaat is de aanroep fout en zal open() falen.  O_EXCL Is
              gebroken op NFS bestandsystemen; programma's die op O_EXCL
              vertrouwen om bestandvergrendelings-opdrachten uit te voeren
              bevatten een wedstrijd mogelijkheid. De oplossing voor het
              uitvoeren van `atomische' bestandvergrendelingen met gebruik van
              een slot-bestand is het maken van een uniek bestand in hetzelfde
              bestandsysteem (met machinenaam en pid), gebruik link(2) om een
              koppeling te maken met het slotbestand. Als link() 0 teruggeeft
              is het slot gelukt. Gebruik anders stat(2) op het unieke bestand
              om te controleren of het koppelingen aantal van het bestand
              toegenomen is naar 2, in welk geval het slot ook geslaagd is.

       O_NOCTTY
              {geen controlerende tty} Als padnaam naar een terminal apparaat
              wijst — zie tty(4) — dan zal het niet de controlerende terminal
              van het proces worden, ook al heeft het proces geen
              controlerende terminal.

       O_TRUNC
              {afhakken} Als het bestand al bestaat wordt het afgehakt (naar
              lengte nul).

       O_APPEND
              {toevoegen} Het bestand is geopend in toevoegen-modus. Vóór
              elke write(), wordt de positie in het bestand einde-van-bestand,
              alsof lseek gebruikt was.  O_APPEND Kan leiden tot verpeste
              bestanden op NFS bestandsystemen als meer dan één proces
              tegelijk gegevens aan het einde toevoegt. Dat is omdat NFS
              toevoegen-aan-het-einde niet ondersteund, de cliënt kernel moet
              dus `alsof' doen maar dat is onmogelijk zonder een wedstrijd-
              mogelijkheid.

       O_NONBLOCK of O_NDELAY
              {niet blokkeren} {geen vertraging} Het bestand wordt geopend in
              niet-blokkerende mode.  open() En andere daaropvolgende
              operaties op de bestandindicator die teruggegeven wordt, zullen
              het proces niet blokkeren. Voor hoe FIFO's (pijpen met namen)
              behandeld worden, zie ook fifo(4).

       O_SYNC {gelijktijdig} Het bestand is geopend voor onmiddellijke In/Uit.
              Elke write() naar de opgeleverde bestandindicator zal het
              aanroepende proces blokkeren, totdat de gegevens (materieel)
              naar de onderliggende hardware zijn geschreven.  Maar zie
              BEPERKINGEN onder

       O_NOFOLLOW
              {niet volgen} Als padnaam een symbolische koppeling is dan faalt
              de open.  Symbolische koppelingen in eerdere delen van de
              padnaam worden nog steeds gevolgd.

              Dit is een FreeBSD uitbreiding, die aan Linux werd toegevoegd in
              versie 2.1.126.  De `headers' van glibc 2.0.100 en later
              definiëren deze vlag; kernel's van voor 2.1.126 negeren deze
              vlag.

       O_DIRECTORY
              {directorie} Als padnaam geen directorie is dan faalt open. Deze
              vlag is eigen aan Linux, en werd toegevoegd in kernel versie
              2.1.126 om deny-of-service {negeren van diensten} problemen te
              omzeilen als opendir(3) wordt aangeroepen op een FIFO of een
              tape-apparaat. Deze vlag zou niet gebruikt moeten worden buiten
              het bouwen van opendir.

       O_LARGEFILE
              {groot bestand} Op 32-bit systemen die grote bestandsystemen
              {eng: LFS} ondersteunen, staat dit toe om bestanden met een
              langere lengte dan in 32-bits uitgedrukt kan worden, toch te
              openen. De Linux kernel ondersteund dit nu nog niet (nu
              2.1.130), maar de vlaggen definities zijn present en de
              gebruikersruimte LFS-interfaces zijn aanwezig in de glibc 2.1
              test uitgave.

       Sommige van deze niet-verplichte vlaggen kunnen veranderd worden met
       fcntl nadat het bestand is geopend.

       mode Bepaald de toestemmingen die worden gebruikt als een bestand wordt
       gemaakt. Dit wordt veranderd door het umask {nl: gebruikers-
       stempel/masker} van het proces op de gebruikelijke manier: de
       toestemmingen van het gemaakte bestand worden (mode & ~umask).

       In de volgende symbolische constanten is voorzien voor mode:

       S_IRWXU
              00700 gebruiker (bestand eigenaar) heeft lees, schrijf en
              uitvoer toestemming

       S_IRUSR (S_IREAD)
              00400 gebruiker heeft lees toestemming

       S_IWUSR (S_IWRITE)
              00200 gebruiker heeft schrijf toestemming

       S_IXUSR (S_IEXEC)
              00100 gebruiker heeft uitvoer toestemming

       S_IRWXG
              00070 groep heeft lees, schrijf en uitvoer toestemming

       S_IRGRP
              00040 groep heeft lees toestemming

       S_IWGRP
              00020 groep heeft schrijf toestemming

       S_IXGRP
              00010 groep heeft uitvoer toestemming

       S_IRWXO
              00007 anderen hebben lees, schrijf en uitvoer toestemming

       S_IROTH
              00004 anderen hebben lees toestemming

       S_IWOTH
              00002 anderen hebben schrijf toestemming

       S_IXOTH
              00001 anderen hebben uitvoer toestemming

       mode Moet altijd gegeven worden wanneer O_CREAT in de vlaggen, zit. Als
       O_CREAT niet in de vlaggen zit wordt mode genegeerd.

       creat() Is hetzelfde als open met vlaggen gelijk aan
       O_CREAT|O_WRONLF|O_TRUNC.


EIND WAARDE
       open En creat geven de nieuwe bestandindicator terug, of -1 als er een
       fout was (en welk geval errno naar behoren wordt gezet).  Merk op dat
       open apparaat speciale bestanden kan openen, maar creat kan ze niet
       maken - gebruik in plaats daarvan mknod(2).

       Op NFS bestand systemen waar UID `mapping' {nl: in kaart brengen} aan
       staat, geeft open een bestandindicator terug, maar read(2) aanvragen
       worden niet toegestaan, en falen met EACCES.  Dit is omdat de cliënt
       de open doet door de toestemmingen te controleren, maar het UID
       `mappen' wordt door de server gedaan bij lees en schrijf aanvragen.

FOUTEN
       EEXIST {bestaat} padnaam Bestaat al en O_CREAT en O_EXCL werden
              gebruikt.

       EISDIR {is directorie} padnaam Wijst naar een directorie en de toegang
              tot het bestand betekende o.a.  schrijf-toegang.

       EACCES {toegang} De gevraagde toegang tot het bestand werd niet
              toegestaan, òf één van de directories in padnaam had geen
              zoek (uitvoer) toestemming, òf het bestand bestond nog niet en
              schrijf toegang in de ouder-directorie werd niet toegestaan.

       ENAMETOOLONG
              {naam te lang} padnaam was te lang.

       ENOENT {geen ingang} Een directorie deel van padnaam bestaat niet of is
              een loshangende symbolische koppeling.

       ENOTDIR
              {geen dir} Een deel gebruikt als directorie in padnaam is in
              feite geen directorie, of O_DIRECTORY werd gebruikt maar padnaam
              was geen directorie.

       ENXIO  {geen apparaat of adres} O_NONBLOCK | O_WRONLY is gezet en het
              genoemde bestand is een FIFO maar er is geen proces dat de FIFO
              open heeft om te lezen, of het bestand is een apparaat speciaal
              bestand maar er is geen bijbehorend apparaat.

       ENODEV {geen apparaat} padnaam Wijst naar een apparaat speciaal bestand
              maar er is geen bijbehorend apparaat. (Dit is een Linux kernel
              bug - in deze situatie moet ENXIO worden teruggegeven.)

       EROFS  {alleen-lezen bestandsysteem} padnaam Wijst naar een bestand op
              een alleen-lezen bestandsysteem en schrijf toegang werd
              gevraagd.

       ETXTBSY
              {text bezig} padnaam Wijst naar een uitvoerbaar bestand dat
              momenteel wordt uitgevoerd en schrijf toegang werd gevraagd.

       EFAULT {fout} padnaam Wijst buiten door u toegankelijke adres ruimte.

       ELOOP  {cirkel} Er werden teveel symbolische koppelingen tegengekomen
              bij het oplossen van padnaam, of O_NOFOLLOW werd gebruikt, maar
              padnaam was een symbolische koppeling.

       ENOSPC {geen ruimte} padnaam Zou gemaakt worden, maar het apparaat dat
              padnaam zou gaan bevatten heeft geen ruimte voor een nieuw
              bestand.

       ENOMEM {geen geheugen} Onvoldoende kernel geheugen voorhanden.

       EMFILE {maximum bestanden} Het proces heeft al het maximale aantal
              bestanden open.

       ENFILE {aantal bestanden} De grens aan het totale aantal open bestanden
              op het systeem is bereikt.

VOLDOET AAN
       SVr4, SVID, POSIX, X/OPEN, BSD 4.3

BEPERKINGEN
       Er zijn vele ongelukkigheden in het protocol waar NFS op gebaseerd is,
       die onder anderen O_SYNC en O_NDELAY nadelig beïnvloeden.

       POSIX voorziet in drie verschillende soorten van onmiddellijke In/Uit,
       die bij de O_SYNC, O_DSYNC en O_RSYNC horen. Momenteel (2.1.130) zijn
       deze allemaal gelijk onder Linux.

ZIE
       read(2) {lees}, write(2) {schrijf}, fcntl(2) {manipuleer bi}, close(2)
       {sluit, link(2) {verbind}, mknod(2) {maak node}, mount(2) {mount},
       stat(2) {staat}, umask(2) {gebruikers stempel}, unlink(2) {maak los},
       socket(2),{socket} fopen(3) {openen}, fifo(4) {eerst in, eerst uit}


VERTALING
       Dit is een handleiding uit manpages-dev 1.34.  Alles wat tussen
       `{'..`}' staat is aanvullende vertaling, en hoort niet bij de originele
       handleiding.  Email naar <manpages-nl@nl.linux.org>.

       $Id: open.2,v 1.2 2005/01/31 09:47:28 wouter Exp $



Linux                            June 3, 1999                          OPEN(2)