La conoscenza delle funzioni aperte, lette e di scrittura è essenziale perché ne abbiamo sempre bisogno per archiviare o smaltire le informazioni che vengono archiviate nei file. La lingua C ha due funzioni di base che è possibile utilizzare per aprire i file, utilizzando le funzioni Open () e Fopen (), ognuna con metodi di chiamata diversi.
In questo articolo di Linux, imparerai come utilizzare la funzione Open (). Spiegheremo tutto su questa funzione, la sua sintassi, la chiamata del metodo, gli argomenti di input e output, il tipo di dati che accetta in ciascun caso e come dichiararli correttamente.
Quindi, applicheremo ciò che abbiamo appreso implementando l'uso di questa funzione in esempi pratici che abbiamo preparato per te con frammenti di codice e immagini che mostrano l'uso della funzione Open () nella lingua C.
Affinché tu abbia una conoscenza completa, aggiungiamo una sezione speciale che descriva tutti gli errori che possono verificarsi quando si utilizza questa funzione, nonché il loro rilevamento e identificazione, in modo che nel caso in cui si verifichino, si hanno le tecniche necessarie per un soluzione rapida.
Sintassi della funzione Open () in lingua C
int Open (const char *pathname, flags int);Descrizione della funzione Open () in lingua C
La funzione Open () apre un file per la lettura o la scrittura. Questa funzione apre il file specificato nell'argomento di input del percorso. Questo input deve specificare il percorso assoluto o relativo e il nome del file in formato stringa o un puntatore ad esso.
L'argomento di input Flags specifica gli attributi che il file deve avere. Di seguito è riportato un elenco delle flag che questo argomento di input accetta e una breve descrizione dell'attributo che ognuno imposta:
Bandiera | Descrizione |
O_rdonly | Apri il file solo per la lettura. |
O_wronly | Apri il file solo per la scrittura. |
O_rdwr | Apri il file per la lettura e la scrittura. |
O_creat | Crea un file nel percorso e nel nome specificato in Pathname discussione. |
O_ APPEND | Apre il file e posiziona il cursore alla fine del contenuto. |
O_async | Abilita il controllo di ingresso e uscita per segnale. |
O_CLOEXEC | Abilita la modalità Close-on-Exec sul file aperto. |
O_nonblock | Disabilita il blocco del file aperto. |
O_TMPFILE | Crea un file temporaneo senza nome sul percorso specificato. |
Nei casi in cui viene utilizzata più di una flag, è necessario eseguire un'operazione logica "o". Questo può essere fatto all'interno dei flag degli argomenti di input nella stessa riga di codice della funzione di funzione.
Gli attributi e le modalità possono essere modificati o consultati una volta aperto il file con la funzione fcntl ().
La funzione Open () restituisce un numero intero che contiene il descrittore del file aperto. Questo descrittore viene utilizzato come argomento di input per funzioni di elaborazione dei file come read (), write (), ecc., Per fare riferimento al file.
Questa funzione è definita in "UNISTD.H ”intestazione. I flag che definiscono gli attributi e la modalità per aprire il file sono definiti in “FCNTL.H". Per utilizzare la funzione Open (), è necessario includere queste intestazioni nel codice come segue:
#includereCome aprire un file utilizzando la funzione Open () in lingua C
In questo esempio, useremo la funzione Open () per aprire un file in modalità di lettura e scrittura. In questo caso, è un file precedentemente creato chiamato "esempio.TXT" che è conservato in "Documenti".
Passo 1: Il primo passo è includere le intestazioni richieste e dichiarare che esce vuoto e ritorna nella funzione principale ().
Passo 2: Il prossimo passo è dichiarare le variabili che fungono da argomenti di input e output alla funzione Open (). Come argomento di output, dichiariamo l'intero "FD" che è il descrittore di file. Come argomento di input, dichiariamo l'array di caratteri buffer che contiene la stringa con il percorso e il nome del file da aprire.
Dichiariamo anche una serie di 512 caratteri chiamati "testo" in cui archiviamo il testo che vogliamo scrivere al file che, in questo caso, è il primo paragrafo di questo articolo.
Passaggio 3: Una volta dichiarate le variabili, chiamiamo la funzione aperta () e passiamo l'intero "FD" come argomento di output, il percorso della stringa come primo argomento di input e il flag O_wronly come secondo argomento.
Passaggio 4: Quando Open () ritorna dalla chiamata, restituisce il descrittore del file che viene aperto in "FD". Quindi, scriviamo con la funzione Write (), passando il descrittore "FD" come primo argomento di input, il testo della stringa come secondo argomento di input e infine le dimensioni del testo ottenuto con la funzione strlen (). Dopo l'operazione di scrittura, chiudiamo il file con la funzione chiusura ().
Ecco il codice completo per questo esempio:
//Passo 1La figura seguente mostra la compilazione e l'esecuzione di questo codice insieme al file che abbiamo appena scritto. Come possiamo vedere, la funzione Open () apre correttamente il file. Quindi utilizziamo la funzione write () per scrivere il contenuto del testo. In questo caso, contiene il primo paragrafo di questo articolo:
Errori che possono verificarsi quando si utilizza la funzione Open (): come rilevarli e identificarli
L'uso della funzione Open () può portare a vari errori. In questo caso, restituisce un risultato uguale a -1.
Il modo più semplice per determinare se si è verificato un errore è utilizzare una condizione "if" in cui la condizione è il valore -1 che viene restituito in "FD". Ora, esaminiamo come utilizzare questo metodo per determinare se si è verificato un errore:
fd = open ("percorso/nome file", flags);Se la funzione Open () restituisce con un errore, va all'istruzione "if" e stampa il messaggio, “Si è verificato un errore durante il tentativo di aprire il file".
Quando Open () restituisce un risultato uguale a -1, memorizza automaticamente un codice numerico nella variabile Errno Global che è definita in "Errno.H ”intestazione. Questo codice numerico può essere utilizzato per identificare l'errore che si è verificato.
Quanto segue è un estratto degli errori che la funzione Open () può generare, insieme a una breve descrizione di ciascun errore e del valore intero associato:
Definizione | Valore in errno | Errore |
Eperm | 1 | operazione non permessa |
Enoent | 2 | Nessun file o directory con questo nome |
Eintr | 4 | Chiamata di sistema interrotta |
Enxio | 6 | Nessun dispositivo o indirizzo del genere |
Enomem | 12 | Fuori dalla memoria |
Eacces | 13 | Permesso negato |
Efault | 14 | Indirizzo cattivo |
EBUSY | 16 | Dispositivo o risorsa occupata |
Eexist | 17 | il file esiste |
Enodev | 19 | Nessun apparecchio di questo tipo |
Enotdir | 20 | Non una directory |
Eisdir | 21 | È una directory |
Einval | 22 | Argomento non valido |
Efile | 23 | Overflow della tabella di file |
Emfile | 24 | Troppi file aperti |
EtxtBsy | 26 | File di testo occupato |
Enospc | 28 | Nessun spazio rimasto sul dispositivo |
Erofs | 30 | File system di sola lettura |
Enametoolong | 36 | Nome file troppo lungo |
Eloop | 40 | Troppi collegamenti simbolici incontrati |
Eoverflow | 75 | Valore troppo grande per il tipo di dati definito |
Edquot | 122 | Quota superata |
Il modo più semplice per identificare un errore è aprire uno switch in cui la variabile Errno è la condizione di salto e ogni caso è una definizione di errore.
Successivamente, considera un esempio in cui apriamo un file che non esiste, risultando in un errore. Per rilevare un errore, utilizziamo la condizione "if" che abbiamo visto nello snippet precedente. Per identificarlo, apriamo un interruttore con i tre errori più comuni che questa funzione può produrre:
#includereLa seguente immagine mostra la compilazione e l'esecuzione di questo codice. In esso, vediamo come viene rilevato l'errore generato nella condizione "if" e come gli errori sono identificati nell'interruttore condizionale per visualizzare il messaggio e il valore specifico:
Conclusione
In questo articolo di Linux, abbiamo spiegato come utilizzare la funzione Open () per aprire i file.
Ti abbiamo mostrato la sintassi di questa funzione e la descrizione teorica di come funziona, il metodo della chiamata, gli argomenti di input e il tipo di dati utilizzati in ciascun caso.
Abbiamo quindi implementato l'uso della funzione Open () in un esempio pratico usando frammenti di codice e immagini. Ti abbiamo mostrato come dichiarare le variabili richieste, chiamare questa funzione per aprire un file e scrivere ad esso.
Abbiamo anche incluso una sezione in cui elenchiamo tutti gli errori che questa funzione può generare. Ti abbiamo mostrato le tecniche per rilevarle e classificarle in modo da avere i mezzi necessari per ripararli rapidamente quando si verificano.