Skip to main content

Obriu Linux Command i Unix Command

Anonim

Sinopsi

#incloure #incloure #incloure int obert (const char * nom de ruta , int banderes ); int obert (const char * nom de ruta , int banderes , mode_t mode ); int creat (const char * nom de ruta , mode_t mode );

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.

Errors

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.

Conformitat amb

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.

Restriccions

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.