Sinopsia
# include << A HREF = "file: /usr/include/sys/types.h"> sys / types.h> #include << A HREF = "file: /usr/include/sys/stat.h"> sys / stat.h> #include << A HREF = "file: /usr/include/fcntl.h"> fcntl.h> int apertura (const char * pathname , int bandieri ); int apertu (compini char * pathname , int bandieri , mode mode_t ); int creat (const char * pathname , mode_t mode );Descrizzione
U sistema apertu () u sistema di u telefonu linux hè adupratu per cunvertisce un nome di via in un descriptor di schedariu (un unicu nicu, nè micca negativu per l'usu in l'I / O sussegwente cum'è di leghje , scrivite , etc.). Quandu u chjamatu hè successu, u descriptor di archiviu volte fù u discursu più pocu di l'architettu ùn hè micca avà apertu per u prucessu. Sta voce creeghja un novu archiu apertu, senza spartera cù qualsiasi prucessu. (Ma i schedari aperti cumune pò esse ghjustificate via a furchetta (2) calla di sistema). U novu descriptor di schedariu hè stituutu per esse aperte per funziunalità di u ghjocu (vede fcntl (2)). U cuntenutu di u schedariu hè stabilitu à u principiu di u schedariu.
U paràmetru bandieri hè unu di O_RDONLY , O_WRONLY o O_RDWR chì request opening the file read-only, write-only or read / write, respectively, bitwise- or 'd with zero or more of the following:
O_CREAT
Se u schedariu ùn esiste micca esse creatu. U pruprietariu (l'ID d'utilizatore) di u schedariu hè stituutu à l'identità di usti effittivamenti di u prucessu. A prughjettà di u gruppu (ID di gruppu) hè stituutu à l'identità di u gruppu effittive di u prucessu o à l'identità di u gruppu di u principiu (in sicretu u tipu di u sistema di archive è l'opere di montatura, è u modu di u direttori parent, vede, per esempiu, a muntagna Opzioni di staziali è di furmati di u sistema di filesystem ext2, cum'è se ne descrizanu in muntagna (8)).
O_EXCL
Quandu s'utilice cù O_CREAT , se u schedariu esiste digià hè un errore è l' apertu ùn falluta. In questu cuntestu, un ligame simbolicu esiste, senza qualse modu di u puntu puntu. O_EXCL hè spartu nantu à i sistemi di schedarii di NFS , i schedari chì avvenanu per eseguisce e cumpetenze di e perspettivi cuntene una crescita di corsa. A suluzione per u schedariu atomicu bluccatu cù un logu di pezzu hè di creà un schedariu unicu à u listessu fs (per esempiu, incorporate u nome di l'ostendiente è u pid), utilice l' unnessu (2) per fà un ligame à u schedariu di chjostru. Se ligame () volte 0, u lock hè successu. In più, utilizate stat (2) nantu à u schedariu unicu per verificà se u so cuntattu d'avvedimentu hè cresciutu à 2, in quale casu u lock hè ancu successu.
O_NOCTTY
Se a strada di navigazione si riferisce à un dispertu terminale --- vede tty (4) --- ùn hè micca diventatu u terminal di cuntrollu di u processu ancu se u prucessu ùn hà micca unu.
O_TRUNC
Se u schedariu esiste prublemi è hè un schedariu regulare è u modu aperto permette l'scrittura (per esempiu, hè O_RDWR o O_WRONLY) serà truncatu à a largitude 0. Si u schedariu hè un ficheru FIFO o di u discu terminale, a bandiera O_TRUNC hè ignora. Inutili, l'effettu di O_TRUNC hè micca specificatu. (Da parechji versioni Linux ùn serà micca ignucatu; in altri versioni, tornarà un errore).
O_APPEND
U file hè apertu in append mode. Prima di qualsiasi scrive , u punteru di u schedariu hè posizionatu à a fine di u schedariu, cum'è cun lseek . O_APPEND puderia purtari à i schedari corrupted à i sistemi di schedari NFS si più di un prucessu aghjunta data à un schedariu da una volta. Questu causa chì NFS ùn sanu micca di appendà à un schedariu, perchè u kernel di cliente duverà simulerà, chì ùn pò micca esse fattu senza assicuranza di corsa.
O_NONBLOCK o O_NDELAY
Quandu hè pussibule, u schedariu hè apertu in u modu non-blocking. Nè u prugettu è nisuna operazione sussegwente nantu à u descriptor di u schedariu chì tornanu torna u prucessu di chjamà à aspittà. Per a gestione di FIFOs (chjamati pipii), vedi ancu fifo (4). Stu modu ùn devi micca bisognu di alcune in furmà altri altri FIFO.
O_SYNC
U schedariu hè apertu per I / O synchronous. Qualchese scrive à u discrivezzione di u schedariu chì seguitanu disturverà u processu di chjamà finu à chì a data hè statu scrittu fisicu à u hardware sottuferente. Vede RITRAZZIONI Sottucategurie, per via.
O_NOFOLLOW
Sì a strada hè un ligame simbolicu, eppo l'oculazione falla. Questa hè una estensione di FreeBSD, chì era aghjuntu à Linux in a versione 2.1.126. I vitture simbolica in cumpunenti cchiu antichi di u viaghju seguenu avè seguitu. E i capulavini da glibc 2.0.100 è più tard include una definizione di questa bandiera; Kernels prima di 2.1.126 avè ignoratu si s'anu usatu .
O_DIRECTORY
Se u patrimoniu ùn hè micca un guida, pruvucà a aperta per fallut. Questa bandera hè spicificità di Linux, è era aghjuntu in a versione di kernel 2.1.126, per evitari di prublemi di denial of service si opendir (3) hè chjamatu nantu à un dispositu FIFO o di cinta, ma ùn deve esse usatu fora di l'implementazione di opendir .
O_DIRECT
Pruvate per minimizzà l'effetti di cache di l'I / Ou à u di stu schedariu. In generale, questu scandalizà u praticamentu, ma hè utile in situazioni spiciali, cum'è quandu l'appricazioni facenu i so caching. U schedariu I / O hè diretta direttamente à / da i buffetti di l'utilizatori. U I / O hè sincronu, per esempiu, à a cumplimintata di u lettu (2) o scrivite (2) u sistema di chjamate, e dati hè garantitatu da esse trasfiriti. U trasferimentu di trasferimentu è l'alineazione di u buffer di u utilizatore è u prugressu di scrittore sò tutti sò multiplii di u grandu di u bloque lògicu di u sistema di schedari.
Questa bandiera hè soporta à un numeru di sistemi Unix-like; supportu era aghjuntu sottu Linux in kernel versione 2.4.10.
Un interfettu semanticamenti simili per i dispositi di u bloque hè deskrittatu in materiali (8).
O_ASYNC
Genera un signalu (SIGIO per modu predeterminatu, ma questu pò esse cambiatu via fcntl (2)) quandu l'inghjustu o a risurta hè pussibule nant'à u discrizzioni di schedariu. Questa funzione hè solu dispunibili per i terminali, pseudo-terminali è tondini. Vede fcntl (2) per più infurmazioni.
O_LARGEFILE
In i sistemi di 32 -bit chì sustenemu u Sistema di Richele Grande, permettenu file chì e so tamantu pò micca esse ripresentatu in 31 bits per esse aperti.
Alcune di sti bandieri opulite si pò mudificà cù fcntl dopu chì u schedariu hè statu apertu.
U modalità di scelta specifica i permessi per aduprà in casu un nuvellu schedariu hè creatu. Hè modificatu da u umask di u prucessu in u modu urientale: i permessi di u schedariu creatu sò (mode & ~ umask) . Innota chì este modu solu s'applicava à accessu futuri di u schedariu novu creatu; a chjamata aperta chì crea un schedariu di sianu read-reads pò vultà un descriptor di schedariu di legenda / scrivere.
I constante simbolii seguenti sò stati previsti modi :
S_IRWXU
Uperatore 00700 (persone di l'archive) hà lettu, scrivite è eseguite permessu
S_IRUSR (S_IREAD)
L'autorità di 00400 hà permessu di leghje
S_IWUSR (S_IWRITE)
L'autoritariu 00200 hà permessu di scrittura
S_IXUSR (S_IEXEC)
Upertu 00100 hà permessu di esecutà
S_IRWXG
U gruppu 00070 hà leggiu, scrivite è eseguitu permessu
S_IRGRP
U gruppu 00040 hà permessu di leghje
S_IWGRP
U gruppu 00020 hà permessu di scrittura
S_IXGRP
Gruppu 00010 hà eseguitu permessu
S_IRWXO
00007 altri anu leggiu, scrive è esce u permessu
S_IROTH
00004 altri anu legatu permessu
ICCITA
00002 altri anu permessu di scrittura
S_IXOTH
00001 altri anu eseguitu permessu
Modu si deve esse specificatu quandu O_CREAT hè in i bandieri , è hè ignurata altrimente.
creat hè equivalente à aperta cù bandieri igual à O_CREAT | O_WRONLY | O_TRUNC .
RETURN VALUE
apertu è creatu torna u novu descriptor di file, o -1 se un errore dà (in quale casu, errno hè stata pronta). Avete chì apertu pò apertu un dispositiu di architetti speziale, ma creat ùn pò micca creà l'usu di u mknod (2).
In u sistema di archivi di NFS cù l'UID cartulare accettati, apertu pudete torrant un descriptor di u schedariu, ma per esempiu leghjite (2) e ricerche chjamati cù EACCES . Questu hè perchè u cliente cumportanu apertu cumentu i permessi, ma u cartulare UID hè realizatu da u servitore nantu à leghje è scrive pedistalli.
Se u schedariu hè novu creatu, u so atime, ctime, i terreni mtime sò stati à u tempu corroniu, è cusì hè a ctime è u mtestu di u ghjurnale parent. In oltre, se u schedariu hè modificatu per via di a bandiera O_TRUNC, i cinghi è i pezzi mtime sò setturi à u tempu.
Errori
EEXIST
a carrietta hè digià esiste è O_CREAT è O_EXCL anu utilizatu.
EISDIR
a strada di navigazione si riferisce à un direttori è l'accessu dumandatu a scrittura involucrita (questu, O_WRONLY o O_RDWR hè stata).
EACCES
L'accessu dumandatu à u schedariu ùn hè micca permessu, o unu di i direttori in u pathname ùn permettenu micca permessu di ricerca (eseguisce), o u schedariu ùn esiste micca sempre è scrive l'accessu à u direttori parentali ùn hè micca permessu.
ENAMETOOLONG
a strada era troppu longa.
ENOENT
O_CREAT ùn hè micca stabilitu è u schedariu chjamatu ùn esiste micca. Or, un componente di u direttori in u pathname ùn si hè micca o hè un ligame simbolicu chì hà dangling.
ENOTDIR
Un componente chì hè adupratu com'è un direttore in u nome di viaghju hè micca, in fattu, un direttori, o O_DIRECTORY hè statu specificatu è a via ùn hè micca un guidatu.
ENXIO
O_NONBLOCK | O_WRONLY hè stallatu, u schedariu chjamatu hè un FIFO è nisun prucessu ùn hà u libbru apertu per leghje. Or, u schedariu hè un dispunìbule architettore specialu è ùn esiste micca un dispositu correlitariu.
ENODEV
u nome di a strada fa riferenu à un schedariu speditu speciale è ùn esiste micca u dispositivu. (Questu hè un kernel Linux di bug - in questa situazione ENXIO deve esse tornatu).
EROFS
a strada di navigazione si riferisce à un schedariu nantu à un sistema di filesystem di legnu solu è accessu per scrivite era dumandatu.
ETXTBSY
A strada di navigazione si fa riferisce à una imetta executable chì hè stata esercita è l'accessu di scritta era dumandatu.
EFAULT
i punti di strada fora di u vostru indirizzu accessu spaziu.
ELOOP
À parechji rimbion simboliques sò stati trovi incù risolviu a via , o O_NOFOLLOW hè specificatu, ma a via era un vindicazione simbolica.
ENOSPC
hè stata creata da strada, ma u dispusitivu chì cuntenenu u pathu ùn hà micca spaziu per u novu schedariu.
ENOMEM
Memoria insufficente di kernel era disponibile.
EMFILE
U prucessu hà digià a numeru massimu di schedari aperti.
ENFILE
U limitu à u numeru tutale di schedari aperti nantu à u sistema hè stata missu.
Cumplimenti a
SVr4, SVID, POSIX, X / OPEN, BSD 4.3 I bandi O_NOFOLLOW è O_DIRECTORY sò Linux -specific. Pò esse pudete di definisce a macro _GNU_SOURCE per avè a so definizione.
Restrictions
Ci sò tanti pezzioli in u protocolu sottuffiannamentu NFS, chì anu influente di l' O_SYNC è O_NDELAY .
POSIX prupone trè varianti diffirenti di l'I / O synchronized, chì risponde à i bandieri O_SYNC , O_DSYNC è O_RSYNC . Avà (2.1.130) sò tutti sinunimu sottu Linux.