Skip to main content

Apri comando Linux e comando Unix

Linux Tutorial for Beginners: Introduction to Linux Operating System (Giugno 2026)

Linux Tutorial for Beginners: Introduction to Linux Operating System (Giugno 2026)
Anonim

Sinossi

#includere #includere #includere int open (const char * percorso , int bandiere ); int open (const char * percorso , int bandiere , mode_t modalità ); int creat (const char * percorso , mode_t modalità );

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.

Errori

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.

Conforme a

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.

restrizioni

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.