Sinopsi
#incloure
Descripció
Elobert () L'ordre system call linux s'utilitza per convertir un nom de ruta en un descriptor de fitxer (un enter petit no negatiu per al seu ús en E / S subsegüents com amb llegir, escriure, etc.). Quan la trucada és correcta, el descriptor de fitxer retornat serà el descriptor de fitxer més baix que actualment no s'obre al procés. Aquesta crida crea un nou fitxer obert, que no es comparteix amb cap altre procés. (Però els fitxers oberts compartits poden sorgir a través delforquilla(2) crida al sistema). El nou descriptor de fitxer està establert per romandre obert en les funcions exec (vegeufcntl(2)). El desplaçament del fitxer s'estableix al principi del fitxer.
El paràmetre banderes és un delsO_RDONLY, O_WRONLY oO_RDWR que sol · liciten obrir el fitxer de només lectura, escriure només o llegir / escriure, respectivament, bit a bit- o 'd amb zero o més dels següents:
O_CREAT
Si el fitxer no existeix, es crearà. El propietari (ID d'usuari) del fitxer s'estableix en l'identificador d'usuari efectiu del procés. La propietat del grup (identificació de grup) s'estableix a l'identificador del grup efectiu del procés o a l'identificador del grup del directori principal (segons el tipus de sistema de fitxers i les opcions de muntatge i el mode del directori principal, consulteu, per exemple, el suport opcions bsdgroups i sysvgroups del sistema de fitxers ext2, tal com es descriu amuntar(8)).
O_EXCL
Quan s'utilitza ambO_CREAT, si el fitxer ja existeix, és un error i elobert fallarà. En aquest context, existeix un vincle simbòlic, independentment d'on es dirigeix.O_EXCL es trenca en sistemes de fitxers NFS, els programes que es basen en ell per realitzar tasques de bloqueig contenen una condició de carrera. La solució per executar el bloqueig d'arxius atòmics amb un fitxer de bloqueig és crear un fitxer únic en el mateix fs (p. Ex., Incorporar nom d'amfitrió i pid), utilitzeu l'enllaç (2) per fer un enllaç al fitxer de bloqueig. Sienllaç() retorna 0, el bloqueig té èxit. En cas contrari, utilitzeu stat(2) al fitxer únic per comprovar si el recompte d'enllaços ha augmentat a 2, en aquest cas el bloqueig també té èxit.
O_NOCTTY
Si nom de ruta es refereix a un dispositiu terminal --- vegeutty(4) --- no es convertirà en el terminal de control del procés encara que el procés no tingui un.
O_TRUNC
Si el fitxer ja existeix i és un fitxer normal i el mode obert permet escriure (és a dir, és O_RDWR o O_WRONLY) es truncarà a la longitud 0. Si el fitxer és un fitxer de dispositiu FIFO o terminal, s'ignora l'indicador O_TRUNC. En cas contrari, l'efecte d'O_TRUNC no està especificat. (En moltes versions de Linux, s'ignorarà, en altres versions, retornarà un error).
O_APPEND
El fitxer s'obre en mode d'annex. Abans de cadascunescriure, el punter del fitxer es posiciona al final del fitxer, com si ho fesLseek. O_APPEND pot provocar arxius danyats en sistemes de fitxers NFS si més d'un procés afegeix dades a un fitxer alhora. Això es deu a que NFS no suporta l'addició a un fitxer, de manera que el nucli del client ha de simular-lo, que no es pot fer sense una condició de carrera.
O_NONBLOCK oO_NDELAY
Quan sigui possible, el fitxer s'obre en mode sense bloqueig. Ni elobert ni cap operació posterior al descriptor de fitxer que es retorni farà que el procés de trucada esperi. Per al maneig de FIFOs (canonades designades), vegeu tambéfifo(4). Aquest mode no necessita cap efecte en fitxers que no siguin FIFO.
O_SYNC
El fitxer s'obre per a E / S síncrons. Capescriures en el descriptor de fitxer resultant bloquejarà el procés de trucada fins que les dades s'hagin escrit físicament al maquinari subjacent. Consulteu RESTRICCIONS a continuació.
O_NOFOLLOW
Si nom de ruta és un enllaç simbòlic, llavors l'obert falla. Aquesta és una extensió de FreeBSD, que s'ha afegit a Linux a la versió 2.1.126. També es seguirà enllaços simbòlics en components anteriors de la ruta d'accés. Els encapçalaments de glibc 2.0.100 i posteriors inclouen una definició d'aquesta bandera; els nuclis abans de 2.1.126 ho ignoraran si s'utilitza .
O_DIRECTORY
Si nom de ruta no és un directori, provoca que l'obert falla. Aquest indicador és específic per a Linux, i s'ha afegit a la versió 2.1.126 del nucli, per evitar problemes de denegació de servei siopendir(3) s'anomena un dispositiu FIFO o cinta, però no s'ha d'utilitzar fora de la implementació deopendir.
O_DIRECT
Intenta minimitzar els efectes de la memòria cau de la I / O a i des d'aquest fitxer. En general, això degradarà el rendiment, però és útil en situacions especials, com ara quan les aplicacions fan la seva pròpia memòria cau. Les E / S d'arxius es realitzen directament des de / des de buffers d'espai d'usuari. Les E / S són sincròniques, és a dir, a la finalització de la llegir(2) oescriure(2) la crida al sistema, es garanteix la transferència de dades. Les mides de transferència i l'alineació del buffer de l'usuari i el desplaçament de fitxers han de ser múltiples de la mida del bloc lògic del sistema de fitxers.Aquesta bandera és compatible amb diversos sistemes similars a Unix; S'ha afegit suport a Linux en el nucli versió 2.4.10.Es descriu una interfície semànticament similar per als dispositius de bloccrua(8). O_ASYNC Genera un senyal (SIGIO per defecte, però això es pot canviar a través defcntl(2)) quan l'entrada o la sortida són possibles en aquest descriptor de fitxer. Aquesta funció només està disponible per a terminals, pseudo-terminals i preses de corrent. Veurefcntl(2) per a més detalls. O_LARGEFILE Als sistemes de 32 bits que admeten el sistema de fitxers grans, permeten obrir fitxers que no es poden representar en 31 bits. Alguns d'aquests indicadors opcionals es poden modificar utilitzantfcntl després de l'obertura del fitxer. L'argument mode especifica els permisos a utilitzar en cas que es creï un nou fitxer. Està modificat pel procésumask de la manera habitual: els permisos del fitxer creat són(mode & ~ umask). Tingueu en compte que aquest mode només s'aplica als accessos futurs del fitxer recentment creat; elobertcrida que crea un fitxer de només lectura pot retornar un descriptor de fitxer de lectura i escriptura. Es proporcionen les següents constants simbòliques mode : S_IRWXU L'usuari 00700 (propietari del fitxer) ha llegit, escriu i executa el permís S_IRUSR (S_IREAD) L'usuari de 00400 té permís de lectura S_IWUSR (S_IWRITE) L'usuari de 00200 té permís d'escriptura S_IXUSR (S_IEXEC) L'usuari de 00100 té permisos d'execució S_IRWXG El grup 00070 ha llegit, escriu i executa el permís S_IRGRP El grup 00040 ha llegit permís S_IWGRP El grup 00020 té permís d'escriptura S_IXGRP El grup 00010 té permisos d'execució S_IRWXO Altres 00007 han llegit, escriuen i executen permís S_IROTH Altres 00004 han llegit permís S_IWOTH Altres 00002 tenen permís d'escriptura S_IXOTH Altres 00001 tenen permisos d'execució mode Cal especificar quanO_CREAT es troba a la banderes , i s'ignora el contrari. creat és equivalent aobert amb banderes igual aO_CREAT | O_WRONLY | O_TRUNC. VALOR RETORN obert icreat torneu el nou descriptor de fitxer, o -1 si s'ha produït un error (en aquest cas, errno s'estableix correctament). Tingues en compte queobert pot obrir fitxers especials del dispositiu, peròcreat no els puc crear - úsmknod(2) al seu lloc. En sistemes d'arxius NFS amb mapatge UID habilitat,obert pot retornar un descriptor de fitxer, però p. llegir(2) se li denega les sol·licitudsEACCES. Això es deu al fet que el client realitzaobert comprovant els permisos, però el servidor realitza la cartografia UID amb les sol·licituds de lectura i escriptura. Si el fitxer s'ha creat recentment, els camps atime, ctime, mtime s'estableixen a l'hora actual, així com els camps ctime i mtime del directori principal. En cas contrari, si el fitxer es modifica a causa de l'indicador O_TRUNC, els camps ctime i mtime s'estableixen a l'hora actual. EEXIST nom de ruta Ja existeix iO_CREAT iO_EXCL es van utilitzar. EISDIR nom de ruta es refereix a un directori i l'accés requerit per escrit (és a dir,O_WRONLY oO_RDWR està establert). EACCES No està permès l'accés al fitxer, o un dels directoris a nom de ruta no va permetre el permís de cerca (executa), o el fitxer encara no existia i no es permet escriure l'accés al directori pare. ENAMETOOLONG nom de ruta era massa llarg. ENOENT O_CREAT no està configurat i el fitxer amb nom no existeix. O bé un component del directori a nom de ruta no existeix o és un enllaç simbòlic penjant. ENOTDIR Un component utilitzat com a directori a nom de ruta no és, de fet, un directori, oO_DIRECTORYS'ha especificat i nom de ruta no era un directori. ENXIO O_NONBLOCK | O_WRONLY s'estableix, el fitxer anomenat és FIFO i cap procés no té el fitxer obert per llegir. O bé, el fitxer és un fitxer especial de dispositiu i no existeix cap dispositiu corresponent. ENODEV nom de ruta es refereix a un arxiu especial del dispositiu i no existeix cap dispositiu corresponent. (Aquest és un error del nucli de Linux, en aquesta situació, ENXIO s'ha de tornar.) EROFS nom de ruta es refereix a un fitxer en un sistema de fitxers de només lectura i s'ha sol·licitat accés a escriptura. ETXTBSY nom de ruta es refereix a una imatge executable que s'està executant actualment i es va demanar accés a escriptura. EFAULT nom de ruta punts fora de l'espai d'adreces accessible. ELOOP S'han trobat massa enllaços simbòlics en la resolució nom de ruta , oO_NOFOLLOW però es va especificar nom de ruta era un enllaç simbòlic. ENOSPC nom de ruta S'hauria de crear però el dispositiu contenia nom de ruta no té espai per al nou fitxer. ENOMEM No hi ha prou memòria del nucli disponible. EMFILE El procés ja té el nombre màxim de fitxers obert. PERFIL S'ha arribat al límit del nombre total de fitxers oberts al sistema. SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW iO_DIRECTORY Els indicadors són específics per a Linux. Es pot haver de definir el_GNU_SOURCE macro per obtenir les seves definicions. Hi ha moltes infelicitats en el protocol subjacent de NFS, que afecta entre d'altresO_SYNC iO_NDELAY. POSIX proporciona tres variants diferents d'E / S sincronitzades, que corresponen als indicadorsO_SYNC , O_DSYNC i O_RSYNC. Actualment (2.1.130) tots són sinònims sota Linux. Errors
Conformitat amb
Restriccions













