Conegueu el Command Linux Open

Sinopsi

#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 open (const char * pathname , int flags ); int open (const char * pathname , int flags , mode_t mode ); int creat (const char * pathname , mode_t mode );

Descripció

La comanda open () system call linux s'utilitza per convertir un nom de ruta en un descriptor de fitxer (un enter petit i no negatiu per al seu ús en E / S posterior com per 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 de la trucada del sistema fork (2)). El nou descriptor de fitxer està configurat per romandre obert en les funcions exec (vegeu fcntl (2)). El desplaçament del fitxer s'estableix al principi del fitxer.

Els indicadors de paràmetre són O_RDONLY , O_WRONLY o O_RDWR que sol · liciten obrir el fitxer només de 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 a mount (8)).

O_EXCL

Quan s'utilitza amb O_CREAT , si el fitxer ja existeix, és un error i l' obert 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., Incorporant nom d'amfitrió i pid), utilitzeu l' enllaç (2) per fer un enllaç al fitxer de bloqueig. Si l' enllaç () retorna 0, el bloqueig té èxit. En cas contrari, utilitzeu l' estadística (2) en el 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 el nom de la ruta es refereix a un dispositiu de terminal --- vegeu tty (4) --- no es convertirà en el terminal de control del procés, fins i tot si el procés no té 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 cada escriptura , el punter del fitxer es col·loca al final del fitxer, com si es tractés de Lseek . O_APPEND pot portar a fitxers corromputs 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 o O_NDELAY

Quan sigui possible, el fitxer s'obre en mode sense bloqueig. Ni les operacions obertes ni les posteriors en el descriptor de fitxer que es retornen faran 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. Qualsevol escriptura 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 el nom de la 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 el nom de la 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 si opendir (3) s'anomena a un dispositiu FIFO o cinta, però no s'ha d'utilitzar fora de la implementació de opendir .

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, en finalitzar la crida al sistema de lectura (2) o escriure (2), 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.
Una interfície semànticament similar per a dispositius de bloc es descriu en brut (8).

O_ASYNC

Genera un senyal (SIGIO per defecte, però això es pot canviar a través de fcntl (2)) quan l'entrada o la sortida es fan possibles en aquest descriptor de fitxer. Aquesta funció només està disponible per a terminals, pseudo-terminals i preses de corrent. Vegeu fcntl (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 utilitzant fcntl després d'obrir el fitxer.

El mode d' argument especifica els permisos a utilitzar en cas que es creï un nou fitxer. Es modifica per umask del procés de la forma 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; La crida oberta que crea un fitxer de només lectura pot retornar un descriptor de fitxer de lectura i escriptura.

Les següents constants simbòliques es proporcionen per al 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ó

El mode s'ha d'especificar quan O_CREAT es troba als marges i s'ignora el contrari.

El creat equival a obrir - se amb banderes iguals a O_CREAT | O_WRONLY | O_TRUNC .

VALOR RETORN

obrir i crear retornar el nou descriptor de fitxer, o -1 si s'ha produït un error (en aquest cas, errno s'estableix correctament). Tingueu en compte que obrir pot obrir fitxers especials del dispositiu, però el creat no els pot crear, utilitzeu mknod (2).

En sistemes d'arxius NFS amb mapatge UID habilitat, obert pot retornar un descriptor de fitxer, per exemple, es denega les peticions de lectura (2) amb EACCES . Això es deu al fet que el client s'obri mitjançant la comprovació dels permisos, però el servidor realitza la cartografia UID després de les peticions 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.

Errors

EEXIST

El nom de ruta ja existeix i O_CREAT i O_EXCL es van utilitzar.

EISDIR

El nom de la ruta es refereix a un directori i l'accés sol·licitat per escrit (és a dir, O_WRONLY o O_RDWR està establert).

EACCES

L'accés sol · licitat al fitxer no està permès, o un dels directoris del nom de la ruta no va permetre el permís de cerca (executa), o el fitxer encara no existia i l'accés a l'escriptori original no està permès.

ENAMETOOLONG

el nom de la ruta era massa llarg.

ENOENT

O_CREAT no està configurat i el fitxer amb nom no existeix. O bé, un component de directori en el nom de la ruta no existeix o és un enllaç simbòlic penjant.

ENOTDIR

Un component utilitzat com a directori del nom de la ruta no és, de fet, un directori, o O_DIRECTORY s'ha especificat i el nom de la 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

El nom de ruta fa referència 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

El nom de ruta es refereix a un fitxer en un sistema de fitxers de només lectura i es va demanar accés a escriptura.

ETXTBSY

El nom de la ruta es refereix a una imatge executable que s'està executant actualment i es va sol·licitar l'accés a escriptura.

EFAULT

Els punts de ruta d'accés no pertanyen a l'espai d'adreces accessible.

ELOOP

S'han trobat massa enllaços simbòlics a la resolució del nom de la ruta , o s'ha especificat O_NOFOLLOW, però el nom de la ruta era un enllaç simbòlic.

ENOSPC

S'hauria de crear la ruta d'accés, però el dispositiu que conté el nom de la 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.

Conformitat amb

SVr4, SVID, POSIX, X / OPEN, BSD 4.3 Els indicadors O_NOFOLLOW i O_DIRECTORY són específics de Linux . Es pot haver de definir la macro _GNU_SOURCE per obtenir les seves definicions.

Restriccions

Hi ha moltes infelicitats en el protocol subjacent de NFS, que afecta entre altres O_SYNC i O_NDELAY .

POSIX proporciona tres variants diferents d'I / O sincronitzades, que corresponen als indicadors O_SYNC , O_DSYNC i O_RSYNC . Actualment (2.1.130) tots són sinònims sota Linux.