Provided by:
manpages-nl_20051127-4_all
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.). Wan‐
neer 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-schri‐
jven.
vlaggen Mag ook een bitsgewijze of zijn van één of meer van het vol‐
gende:
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 control‐
erende 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 oper‐
aties op de bestandindicator die teruggegeven wordt, zullen het
proces niet blokkeren. Voor hoe FIFO’s (pijpen met namen) behan‐
deld worden, zie ook fifo(4).
O_SYNC {gelijktijdig} Het bestand is geopend voor onmiddellijke In/Uit.
Elke write() naar de opgeleverde bestandindicator zal het aan‐
roepende 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 pad‐
naam 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 lan‐
gere lengte dan in 32-bits uitgedrukt kan worden, toch te ope‐
nen. 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-stem‐
pel/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.
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 toeges‐
taan, ò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.
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 $