Scopri à u Linux Command Open

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 à apertabandieri 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 chjamatiEACCES . 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_DIRECTORYLinux -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.