Sinossi
#includere
Descrizione
IlAperto() il comando system call linux è usato per convertire un pathname in un descrittore di file (un numero intero piccolo, non negativo da usare nell'I / O successivo come con leggere, Scrivi, eccetera.). Quando la chiamata ha esito positivo, il descrittore di file restituito sarà il descrittore di file più basso attualmente non aperto per il processo. Questa chiamata crea un nuovo file aperto, non condiviso con nessun altro processo. (Ma i file aperti condivisi possono sorgere tramite ilforchetta(2) chiamata di sistema.) Il nuovo descrittore di file è impostato per rimanere aperto tra le funzioni exec (vedifcntl(2)). L'offset del file è impostato all'inizio del file.
Il parametro bandiere è uno diO_RDONLY, O_WRONLY oO_RDWR quale richiesta di apertura del file di sola lettura, sola scrittura o lettura / scrittura, rispettivamente, bitwise- o 'd con zero o più dei seguenti:
O_CREAT
Se il file non esiste verrà creato. Il proprietario (ID utente) del file è impostato sull'ID utente effettivo del processo. La proprietà del gruppo (ID gruppo) viene impostata sull'ID di gruppo effettivo del processo o sull'ID di gruppo della directory padre (a seconda del tipo di file system e delle opzioni di montaggio e della modalità della directory padre, vedere, ad esempio, il montaggio opzioni bsdgroups e sysvgroups del filesystem ext2, come descritto inmontare(8)).
O_EXCL
Se usato conO_CREAT, se il file esiste già è un errore e ilAperto avrà esito negativo. In questo contesto, esiste un collegamento simbolico, indipendentemente da dove si punti.O_EXCL è rotto su file system NFS, i programmi che si basano su di esso per eseguire operazioni di blocco conterranno una condizione di competizione. La soluzione per eseguire il blocco di file atomici utilizzando un file di lock è creare un file univoco sullo stesso file (ad esempio, includendo il nome host e il pid), utilizzare il collegamento (2) per creare un collegamento al file di lock. SeLink () restituisce 0, il blocco ha successo. Altrimenti, usa statistica(2) sul file univoco per verificare se il numero di collegamenti è aumentato a 2, nel qual caso anche il blocco ha esito positivo.
O_NOCITY
Se percorso si riferisce a un dispositivo terminale --- veditty(4) --- non diventerà il terminale di controllo del processo anche se il processo non ne ha uno.
O_TRUNC
Se il file esiste già ed è un file normale e la modalità aperta consente la scrittura (vale a dire O_RDWR o O_WRONLY) verrà troncato alla lunghezza 0. Se il file è un file FIFO o terminale, il flag O_TRUNC viene ignorato. Altrimenti, l'effetto di O_TRUNC non è specificato. (Su molte versioni di Linux verrà ignorato, in altre versioni restituirà un errore.)
O_APPEND
Il file viene aperto in modalità append. Prima di ogniScrivi, il puntatore del file è posizionato alla fine del file, come se conlseek. O_APPEND può portare a file danneggiati su file system NFS se più di un processo aggiunge dati a un file in una sola volta. Questo perché NFS non supporta l'accodamento di un file, quindi il kernel del client deve simularlo, cosa che non può essere eseguita senza una condizione di competizione.
O_NONBLOCK oIN RITARDO
Quando possibile, il file viene aperto in modalità non bloccante. Né ilAperto né le successive operazioni sul descrittore di file restituite causeranno l'attesa del processo di chiamata. Per la gestione dei FIFO (named pipe), vedi anchefifo(4). Questa modalità non deve avere alcun effetto su file diversi da FIFO.
O_SYNC
Il file è aperto per I / O sincrono. QualunqueScrivis sul descrittore di file risultante bloccherà il processo chiamante finché i dati non saranno stati scritti fisicamente sull'hardware sottostante. Vedi RESTRIZIONI sotto, però.
O_NOFOLLOW
Se percorso è un collegamento simbolico, quindi l'open fallisce. Questa è un'estensione di FreeBSD, che è stata aggiunta a Linux nella versione 2.1.126. Verranno comunque seguiti i collegamenti simbolici nei componenti precedenti del percorso. Le intestazioni di glibc 2.0.100 e successive includono una definizione di questo flag; i kernel precedenti alla 2.1.126 lo ignoreranno se usati .
O_DIRECTORY
Se percorso non è una directory, perché l'open fallisce. Questo flag è specifico per Linux ed è stato aggiunto nella versione del kernel 2.1.126, per evitare problemi di denial-of-service seopendir(3) viene chiamato su un dispositivo FIFO o su nastro, ma non deve essere usato al di fuori dell'implementazione diopendir.
O_DIRECT
Prova a ridurre al minimo gli effetti della cache dell'I / O verso e da questo file. In generale, questo peggiorerà le prestazioni, ma è utile in situazioni speciali, ad esempio quando le applicazioni eseguono il proprio caching. L'I / O di file viene eseguito direttamente da / per i buffer di spazio utente. L'I / O è sincrono, cioè al completamento del leggere(2) oScrivi(2) chiamata di sistema, è garantito che i dati siano stati trasferiti. Le dimensioni di trasferimento e l'allineamento del buffer utente e dell'offset del file devono essere tutti multipli della dimensione del blocco logico del file system.Questo flag è supportato su un numero di sistemi simil-Unix; il supporto è stato aggiunto sotto Linux nella versione del kernel 2.4.10.Un'interfaccia semanticamente simile per i dispositivi a blocchi è descritta incrudo(8). O_ASYNC Generare un segnale (SIGIO di default, ma può essere modificato tramitefcntl(2)) quando l'input o l'output diventa possibile su questo descrittore di file. Questa funzione è disponibile solo per terminali, pseudo-terminali e socket. Vederefcntl(2) per ulteriori dettagli. O_LARGEFILE Sui sistemi a 32 bit che supportano il Large Files System, consente di aprire file le cui dimensioni non possono essere rappresentate in 31 bit. Alcuni di questi flag opzionali possono essere modificati usandofcntl dopo che il file è stato aperto. L'argomento modalità specifica le autorizzazioni da utilizzare in caso di creazione di un nuovo file. È modificato dal processoumask nel solito modo: le autorizzazioni del file creato sono(modalità & ~ umask). Si noti che questa modalità si applica solo agli accessi futuri del file appena creato; ilApertola chiamata che crea un file di sola lettura potrebbe restituire un descrittore di file di lettura / scrittura. Sono fornite le seguenti costanti simboliche modalità : S_IRWXU L'utente 00700 (proprietario del file) ha permesso di leggere, scrivere ed eseguire S_IRUSR (S_IREAD) L'utente 00400 ha il permesso di lettura S_IWUSR (S_IWRITE) L'utente 00200 ha il permesso di scrittura S_IXUSR (S_IEXEC) L'utente 00100 ha il permesso di esecuzione S_IRWXG Il gruppo 00070 ha letto, scritto ed eseguito il permesso S_IRGRP 00040 gruppo ha il permesso di lettura S_IWGRP 00020 gruppo ha il permesso di scrittura S_IXGRP Il gruppo 00010 ha il permesso di esecuzione S_IRWXO 00007 altri hanno letto, scritto ed eseguito il permesso S_IROTH 00004 altri hanno il permesso di leggere S_IWOTH 00002 altri hanno il permesso di scrittura S_IXOTH 00001 altri hanno il permesso di esecuzione modalità deve essere specificato quandoO_CREAT è nel bandiere e viene ignorato altrimenti. creat è equivalente aAperto con bandiere uguale aO_CREAT | O_WRONLY | O_TRUNC. VALORE DI RITORNO Aperto ecreat restituire il nuovo descrittore di file o -1 se si è verificato un errore (nel qual caso, errno è impostato appropriatamente). Nota cheAperto può aprire i file speciali del dispositivo, macreat non è possibile crearli: utilizzaremknod(2) invece. Sui file system NFS con abilitazione della mappatura UID,Aperto può restituire un descrittore di file ma ad es. leggere(2) richieste sono negate conEACCES. Questo perché il client esegueAperto controllando le autorizzazioni, ma la mappatura UID viene eseguita dal server in seguito a richieste di lettura e scrittura. Se il file è stato appena creato, i suoi campi atime, ctime, mtime sono impostati sull'ora corrente, così come i campi ctime e mtime della directory superiore. Altrimenti, se il file viene modificato a causa del flag O_TRUNC, i suoi campi ctime e mtime sono impostati sull'ora corrente. EEXIST percorso esiste già eO_CREAT eO_EXCL erano abituati. EISDIR percorso si riferisce a una directory e l'accesso richiesto comporta la scrittura (cioè,O_WRONLY oO_RDWR è impostato). EACCES L'accesso richiesto al file non è consentito o una delle directory in percorso non ha permesso il permesso di ricerca (esegui), o il file non esisteva ancora e l'accesso in scrittura alla directory principale non è permesso. ENAMETOOLONG percorso era troppo lungo ENOENT O_CREAT non è impostato e il file con nome non esiste. Oppure, un componente di directory in percorso non esiste o è un collegamento simbolico pendente. ENOTDIR Un componente utilizzato come directory in percorso non è, infatti, una directory, oO_DIRECTORYè stato specificato e percorso non era una directory. ENXIO O_NONBLOCK | O_WRONLY è impostato, il file denominato è un FIFO e nessun processo ha il file aperto per la lettura. Oppure, il file è un file speciale del dispositivo e non esiste alcun dispositivo corrispondente. ENODEV percorso si riferisce a un file speciale del dispositivo e non esiste alcun dispositivo corrispondente. (Questo è un bug del kernel di Linux - in questa situazione ENXIO deve essere restituito.) EROFS percorso si riferisce a un file su un filesystem di sola lettura e l'accesso in scrittura è stato richiesto. ETXTBSY percorso si riferisce a un'immagine eseguibile che è attualmente in esecuzione e è stato richiesto l'accesso in scrittura. EFAULT percorso punta al di fuori del tuo spazio indirizzo accessibile. ELOOP Troppi collegamenti simbolici sono stati incontrati nella risoluzione percorso , oO_NOFOLLOW è stato specificato ma percorso era un collegamento simbolico. ENOSPC percorso doveva essere creato ma il dispositivo contenente percorso non ha spazio per il nuovo file. ENOMEM Memoria insufficiente del kernel disponibile. EMFILE Il processo ha già il numero massimo di file aperti. ENFILE È stato raggiunto il limite sul numero totale di file aperti sul sistema. SVr4, SVID, POSIX, X / OPEN, BSD 4.3O_NOFOLLOW eO_DIRECTORY le bandiere sono specifiche per Linux. Uno potrebbe dover definire il_GNU_SOURCE macro per ottenere le loro definizioni. Ci sono molte infelicità nel protocollo sottostante NFS, che colpisce tra l'altroO_SYNC eIN RITARDO. POSIX fornisce tre diverse varianti di I / O sincronizzati, corrispondenti ai flagO_SYNC , O_DSYNC e O_RSYNC. Attualmente (2.1.130) questi sono tutti sinonimi di Linux. Errori
Conforme a
restrizioni




