Léiert de Linux Command Open

Synopsis

#include << A HREF = "Datei: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "Datei: /usr/include/sys/stat.h"> System / stat.h> #include << A HREF = "Datei: /usr/include/fcntl.h"> fcntl.h> int opgemaacht (const char * pathname , int flags ); int open (const char * pathname , int flags , mode_t mode ); int creat (const char * pathname , mode_t mode );

Beschreiwung

Den open () System Call Call linux gëtt benotzt fir e Wee an en Dateipesterorientéierung ze konvertéieren (eng kleng, net negativ Ganzzeechen fir de Gebrauch an der spéider I / O wéi mat Lies , Schreif etc.) ze benotzen. Wann de Ruff erfollegräich ass, gëtt de Datei- Descriptor zréckgezunn wann et de niddereg Dateie-Deskriptor gëtt deen net aktuell ass fir de Prozess. Dëse Ruf schafft eng nei oppen Datei, déi net mat engem anere Prozedur gedeelt gëtt. (Awer gedeelte geheescht Dateien ginn iwwer den Gabel (2) Systemufro kënnt.) Den neien Date Deskriptor ass festgeluegt ginn fir op Executiv Funktiounen ze bleiwen (kuckt fcntl (2)). De Fichier gëtt op den Ufank vun der Datei gesat.

D'Parameterfändel ass eng vun O_RDONLY , O_WRONLY oder O_RDWR, déi Ufro erof liesen, nëmmen ze schreiwen oder ze schreiwen oder ze liesen / ze schreiwen, deelweis mat der Null oder méi vun der folgender Lëscht:

O_CREAT

Wann d'Datei net existéiert, wäert et geschafen ginn. Den Besëtzer (Benotzer ID) vun der Datei gëtt fir d'effektiv Benotzerkennung vum Prozess festgeluegt. D'Gruppereigenschaft (Gruppidentifikatioun) ass entweder op d'effektive Grupp ID vum Prozess oder op d'Grupp ID vum Materieverwaltung festgeluecht (ofhängeg vun Dateisystemtyp a Mount Mountoptiounen, an de Modus vum Mutterverzeichnis, kuckt zB d'Mount Optiounen bsdgroups an sysvgroups vum ext2-Dateisystem, sou wéi an der Mount (8)).

O_EXCL

Wann Dir O_CREAT benotzt , falls de Fichier schonn existéiert, ass et e Fehler an de Public ass falsch. An dësem Kontext existéiert e symboleschen Link, egal wéi seng Punkte sinn. O_EXCL ass op NFS Dateisysteme gebroot, Programmer déi drop opgespillt ginn fir Sperren z'ënnerstëtzen. D'Léisung fir eng atomesch Datei ze sperren mat engem Lockfile ass eng eegene Fichier op derselwechter FS (z. B. den Hostname an den Pid) ze erstellen, Link (2) benotze fir e Link op de Lockfile ze maachen. Wann de Link () ( 0 ) 0 gëtt, ass d'Sperrung erfollegräich. Andeems Dir stat (2) op der eenzegaarteger Datei benotzt, fir ze kontrolléieren ob säi Link zielt op 2 erop, woubäi och de Schloss och erfollegräich ass.

O_NOCTTY

Wann de Wéngegehalt op e terminal Terminal verweist --- kuckt tty (4) --- et gëtt net de Kontrollkontrollprozess am Prozess, och wann de Prozess net een huet.

O_TRUNC

Wann de Fichier schonn existéiert an ass e regelméissege Fichier an de Open Mode kann schreiwen (dh O_RDWR oder O_WRONLY) gëtt et ofgeschnidden. 0 Wann d'Datei eng FIFO oder Terminal-Datei ass, gëtt d'O_TRUNC-Flagge ignoréiert. Sinn den Effet vum O_TRUNC net spezifizéiert. (Op vill Linux Versiounen gëtt et ignoréiert; an aner Versiounen gëtt et e Fehler.)

O_APPEND

De Fichier gëtt am Anhang uginn. Virun all Schreifweis gëtt de Fichierzeiger um Enn vum Fichier positionéiert, als ob mat lseek . O_APPEND kann zu beschiedegt Fichieren op NFS Dateisystemer féieren wann méi wéi ee Prozess hëlt Daten an e Fichier un. Dëst ass wéinst der NFS net ënnerstëtzt andeems se e Fichier anhëlt, sou datt de Client Kernel et simuléieren, wat net ouni Rennen Zoustänn kann maachen.

O_NONBLOCK oder O_NDELAY

Wa méiglech, gëtt d'Datei an net blockéiertem Modus geännert. Weder déi oppen an déi nächst Operatiounen op de Datei-Deskriptor, deen zréckkënnt, verursaachen den Appell fir ze warten. Fir den Ëmgank vu FIFOs (genannt Päifen) kuckt och fifo (4). Dëse Modus braucht keen Effekt op aner Dateien wéi FIFOs.

O_SYNC

De Fichier gëtt op synchronous E / A geöffnet. All Schreifend op den entsteckten Dateibeschreiwung blockéiert de Ruffprozess ze blockéieren bis d'Daten physesch an déi zugeleechnesch Hardware geschriwwe ginn. Kuckt d'RESTRIKTIONEN ënnen.

O_NOFOLLOW

Wann de Wee net e symbolesche Link ass, da fänkt net op. Dëst ass eng Extrait vun der FreeBSD, déi am Linux 2.1 an der Versioun vum Linux hinzugefügt gouf. Symbolesch Links zu fräie Komponente vum Wee sinn ëmmer nach gefollegt. D'Header aus glibc 2.0.100 a spéider gehéiert eng Definitioun vun dësem Fändel; Kneelen virun 2.1.126 ignoréieren et wann et gebraucht gëtt .

O_DIRECTORY

Wann de Wee net e Verzeichnis ass, verursachen déi oppene Feeler. Dëse Fändel ass Linux-spezifesch an ass an der Kernel Versioun 2.1.126 hinzegeleedegt, fir Missbrauch vu Serviceprobleme zu vermeiden, wann opendir (3) op engem FIFO- oder Baskemaster genannt gëtt, awer net benotzt ginn ausserhalb vun der Ëmsetzung vu opendir .

O_DIRECT

Versicht e Cache Effekter vun der I / O op a vun der Datei ze minimiséieren. Am allgemengen doduerch gëtt d'Performance verbessert, awer et ass nëtzlech an speziellen Situatiounen, wéi wann d'Applikatiounen hir eege Cache maachen. Datei I / O gëtt direkt u / vu Benotzerraumpuffer geschitt. D'I / O ass synchron, dh bei der Vervollständegung vum Lies (2) oder Schreiwe (2) Systemrufnummer, garantéiert dat Daten. Umeldungssegmenter, an d'Ausrichtung vum Benotzerpuffer a Dateieoffset muss all Molekülle vun der logescher Blockgréisst vum Dateisystem sinn.
Dëse Fändel gëtt mat enger Unix-ähnlecher System ënnerstëtzt; Ënnerstëtzung ass ënner Linux an der Kernel Versioun 2.4.10 hinzukommen.
Eng semantesch ähnlech Interface fir Blockgeräter gëtt a roude (8) beschriwwen.

O_ASYNC

Gitt e Signal (SIGIO par default, awer dat kann iwwer fcntl geännert ginn) wann d'Input oder Output op dësem Dateipesteror onméiglech ass . Dës Fonktioun ass nëmme fir Klemmmeeler, Pseudo-Klempen a Sockel. Kuckt d ' FCntl (2) fir méi Detailer.

O_LARGEFILE

Op 32-Bit Systeme déi den Large Files System ënnerstëtzen, erlaaben Dateien, wou d'Gréide kënnen net an 31 Bits opgedeckt ginn.

E puer vun dësen optionalen Markéierter kënnen iwwer fcntl geännert ginn nodeems d'Datei opgemaach gouf.

De Argumentmodus spezifizéiert d'Permissiounen fir ze benotzen wann eng nei Datei schafft. Et gëtt geännert duerch de Prozess vun der Prozess um normale Wee: d'Rechter vun der erstallte Datei sinn (Modus & ~ Umask) . Bedenkt datt dëse Modus nëmmen fir zukënfteg Zougäng op déi nei erstallt Datei; den oppene Link, deen e Lieszeechen erstellt, kënnt och e Lies- / Schreifdate des Deskriptor zréck.

Déi folgend symbolesch Konstanten si fir de Modus virgesinn:

S_IRWXU

00700 Benotzer (Datei Besitzer) huet Liesen, Schreift a fuerderen Erlaabnes

S_IRUSR (S_IREAD)

00400 Benotzer huet Lieserléisung

S_IWUSR (S_IWRITE)

00200 Benotzer huet Schreiwe d'Autorisatioun

S_IXUSR (S_IEXEC)

00100 Benotzer huet ausbezuelen

S_IRWXG

00070 Grupp huet eppes gelies, schreift an auszeüben

S_IRGRP

00040 Grupp huet Léisung geliwwert

S_IWGRP

00020 Grupp huet schreiwe Rechter

S_IXGRP

Grupp 00010 huet ausdrécklech Erlaabnes

S_IRWXO

00007 aner hunn Liesen, Schreiwen an ausbezuelen

S_IROTH

00004 aner hunn d'Autorisatioun geliwwert

S_IWOTH

00002 Aner hunn schreiwe Permissatioun

S_IXOTH

00001 aner hunn d'Autorisatioun ausginn

Modus muss spezifizéiert ginn wann O_CREAT an de Fändelen ass a gëtt soss näischt ignoréiert.

Creat ass equivalent fir oppen mat Fändelen gleich mat O_CREAT | O_WRONLY | O_TRUNC .

RETURN VALUE

Open an Creat ass de neie Datei-Descriptor zréck oder -1, wann e Feeler ofgeschloss ass (an deem Fall ass errno eegestänneg). Note datt oppen kann op spezielle Fichieren Dateien öffnen, mee Kreat kënnen se net erstellen - benotzt mknod (2) statt.

NFS Dateisysteme mat UID-Mapping aktivéiert, kann opgemaale Datei-Descriptor zréckgoen, awer zë Readen (2) Ufroen ginn mat EACCES verweigert . Dëst ass wéinst dem Prêt vum Client klickt , wann d'Permissiounen iwwerpréift ginn, awer UID-Mapping gëtt vun dem Server beim Lies- a Schreif-Ufro gemaach.

Wann d'Datei eréischt kreéiert gëtt, ginn d'Atime, ctime, mtime Felder op déi aktuell Zäit festgeluegt an sou ass d'ctime an mtime Felder vum Mutterverzeichnis. Sinn, wann d'Datei geännert gëtt wéinst dem O_TRUNC-Flag, gëtt seng ctime- a mtime Felder op déi aktuell Zäit gesat.

Feeler

EEXIST

Pfadname gëtt already existéiert an O_CREAT an O_EXCL goufen benotzt.

EISDIR

Weewege bezitt op e Verzeichnis an de Zougrëff oblieft eng schrëftweis (dh O_WRONLY oder O_RDWR ass festgeluegt).

EACCES

De gefrote Zougank zum Fichier ass net erlaabt oder eent vun de Verknüpfungen am Päischthënn net erméiglecht d'Sich (Ausféierung) Erlaabnes, oder d'Fichier ass net fonnt ginn an den Zougang zum Materialliwwel z'erreechen ass net erlaabt.

ENAMETOOLONG

Wee ass ze laang.

ENOENT

O_CREAT ass net festgeluecht an déi genannte Datei existéiert net. Oder eng Verknüpfung vu Verknüpfungen am Päischt ass net existéiert oder ass en zerbrach symbolesch Link.

ENOTDIR

E Component deen als Verzeichnis als Virnumm benotzt gëtt, ass net tatsächlech e Verzeichnis oder O_DIRECTORY uginn an de Wee ass net e Verzeichnis.

ENXIO

O_NONBLOCK | O_WRONLY gëtt gespaart, déi benannt Datei ass e FIFO a kee Prozess huet d'Datei op d'Liese geännert. Oder ass de Fichier e spezielle Fichier vun engem Apparat a kee korrespondéierte Gerät existéiert.

ENODEV

Weewege bezitt op e spezielle Fichier vun engem Apparat a kee korrespondéierte Gerät existéiert. (Dëst ass e Linux Kernel Bug - an dëser Situatioun muss ENXIO zréckkommen.)

EROFS

Weewege bezielt op eng Datei op e Lieseit-Dateiformat a schreift Zougang war gefrot.

ETXTBSY

Weewege bezielt op eng ausführbar Biller, déi am Moment ausgefouert gëtt a Schreifzugriff gebraucht.

EFAULT

Weeërspunkten ausserhalb Är accessibel Adressraum.

ELOOP

Zu sou vill symbolesch Linke goufe bei der Léisung vum Wee , oder O_NOFOLLOW gouf uginn, awer de Wee ass e symboleschen Link.

ENOSPC

De Wee gouf geschaf ginn, awer de Geriichtshaff, deen Pathname enthält , keng Plaz fir déi nei Datei.

ENOMEM

Net genuch Käerz Erënnerung war verfügbar.

EMFILE

De Prozess huet schon déi maximal Zuel vu Dateien opgemaach.

ENFILE

D'Limitatioun vun der totaler Zuel vu Dateien op de System opgemaach ginn ass erreecht ginn.

Conforming to

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 D' O_NOFOLLOW an O_DIRECTORY Flags sinn Linux- spezifesch. Dir musst de _GNU_SOURCE Makro fir hir Definitioune ze definéieren.

Restriktiounen

Et sinn vill Onendlechkeeten am Protokoll, deen de NFS ënnersträicht, deen ënnert anerem O_SYNC a O_NDELAY beaflosst .

POSIX léisst dräi verschidden Varianten vun synchroniséierte I / O, entspriechend den Flags O_SYNC , O_DSYNC an O_RSYNC . Momentan (2.1.130) dës sinn alle ënner Linux.