Fcntl in linux
Nel sistema operativo Linux, la chiamata FCNTL viene eseguita tramite i descrittori. Ad esempio, un blocco di lettura viene posizionato su un descrittore di file leggibili e un caso simile è per il blocco di scrittura. Un descrittore di file rappresenta il numero di file aperto. È conveniente per il programma ricordare su quale file sta lavorando. Quando apriamo un file, il numero che non è già assegnato ed è gratuito viene dato al file nella tabella descrittore del file dei processi. E nel caso della chiusura di un file, quel numero assegnato viene rimosso dalla tabella del descrittore del processo.
Sintassi
#includereInnanzitutto definiamo la libreria FCNTL per realizzare facilmente il processo. La chiamata della funzione contiene principalmente due argomenti nel parametro. Uno è il descrittore, come definito sopra; definisce il file su cui deve essere applicato il comando del controllo. In altre parole, su cui gli attributi devono essere modificati. Il secondo è il comando applicato ai descrittori specificati.
Come FCNTL cambia proprietà del file
La funzione FCNTL viene utilizzata per cinque scopi diversi, principalmente tra cui duplicazione, flag di impostazione, ecc.; Ognuno è descritto qui in dettaglio.
Cmd = f_dupfd
Duplicare il descrittore dei file. Il nuovo valore duplicato viene restituito alla funzione. Questo valore è il più basso che non viene già aperto o assegnato a nessun altro descrittore. È sempre preso come un numero intero e il valore è sempre maggiore del terzo argomento. Inoltre, il valore duplicato ha i suoi flag descrittori di file. Il nuovo descrittore ha la stessa voce nella tabella del descrittore originale.
Cmd = getfd
Questa funzione ha la specialità per restituire le flag del descrittore come valore della funzione. Come indica il nome, otteniamo il flag dopo averlo impostato.
Cmd = setfd
Come ottenere il flag, questa funzione viene utilizzata per impostare il flag del descrittore. Il programma impostare il flag su 0, non chiudere su Exec o su 1, per chiudere su Exec.
Cmd = f_getfl
Questa funzione restituisce i flag per lo stato del file come valore di una funzione. Quando lo stato per il flag è descritto come un flag aperto, allora descriviamo i flag di stato.
Cmd = f_setfl
Imposta il flag di stato sul file. Poiché Getfl viene utilizzato per restituire lo stato del file.
Cmd = f_getown
Questa funzione è correlata all'identità del processo in quanto restituisce l'ID processo e l'ID gruppo di processo.
Cmd = f_setown
Questa funzione tende a creare e impostare ID processo o ID processo di gruppo.
Il valore di ritorno dall'FCNTL dipende dal comando utilizzato. Se i comandi incontrano un errore, restituisce -1. Se ogni funzione non subisce alcun problema, viene restituito qualsiasi altro valore tranne -1. Considerando che nel caso di f_getown, l'ID restituito può essere un valore positivo o un valore negativo.
Ora aggiungeremo alcuni esempi elementari qui. Per implementare i codici di FCNTL, è necessario disporre di un editor di testo e un terminale Linux per ottenere il valore risultante.
Esempio 1
Considera un esempio in cui abbiamo creato e quindi scritto una nuova riga in un file di testo di esempio. Questo esempio non utilizzerà il coinvolgimento di FCNTL come funzione. Le funzionalità di questa funzione saranno implementate nel codice solo utilizzando una libreria.
#includereScriveremo una stringa sul codice, quindi dobbiamo utilizzare la libreria di stringhe. Abbiamo preso una serie di descrittori di file qui. Inoltre, è stato preso un array di caratteri che viene inizializzato direttamente con una stringa di alcuni personaggi. Con l'aiuto del descrittore di file, useremo alcune operazioni di file dello stato del flag di file come leggere e scrivere nel file, ecc. Se il file è già stato creato, è necessario aprirlo e scrivere la stringa in esso.
Fd [0] = aperto ("campione.txt ", o_rdwr);Questa affermazione aprirà il file denominato 'Esempio.txt 'usando il flag O_rdwr. Ora per aggiungere la stringa definisce in precedenza, verrà inserito nel file.
Scrivere (fd [0], bf1, strlen (buf1));Attraverso l'opzione di lettura, la stringa verrà visualizzata sull'esecuzione del codice dal file. Entrambi i descrittori di file sono chiusi alla fine.
Dopo aver salvato il file, useremo un compilatore GCC per l'esecuzione del file.
file file file $ gcc -o.CQuando viene eseguito il codice, vedrai che viene visualizzata una stringa che abbiamo scritto nel codice in un file. Questa affermazione è stata recuperata dal file. Quando vai ai file in Ubuntu, vedrai il campione.file txt. Noterai che la stringa è scritta nel file tramite il codice all'apertura del file.
Esempio 2
Questo è un esempio del comando f_getfl. Restituisce il flag di stato del file come valore della funzione. Innanzitutto, il file verrà aperto; Se non è già stato creato, O_Creat creerà il file; Innanzitutto, tutte queste funzioni di stato della bandiera sono indicate di seguito per renderlo facile da capire.
O_rdonly: questa funzione apre il file solo per lo scopo di lettura.
O_wronly: si occupa solo dello scopo della scrittura.
O_rdwr: è anche per il processo di lettura e scrittura.
O_APPEND: Aggiunge ogni funzione di scrittura sul file corrente.
Queste sono la bandiera principale che viene utilizzata nell'esempio. Tornando all'esempio, se il valore restituito aprendo il file è inferiore a 0, viene visualizzato un messaggio di errore.
Dopo l'apertura, è necessario ottenere il file; Se lo stato del file è -1, viene visualizzato un messaggio di errore; Altrimenti, lo stato del file verrà ricevuto. Ora con l'aiuto della modalità di accesso, otterremo il flag del descrittore di file. Tutte le opzioni verranno controllate tramite l'istruzione if-else. L'opzione in base allo stato del file avrà optato rispettivamente. Alla fine, se lo stato del descrittore dei file è maggiore di 1, significa che il file è ora chiuso.
Compilare il codice; Vedrai che tutte le dichiarazioni vengono visualizzate in base allo stato FD o il file viene aperto o chiuso.
Conclusione
L'articolo 'C: FCNTL Function Utility' contiene le caratteristiche della funzione FCNTL. Il descrittore di file svolge un ruolo vitale nel processo di gestione dei file relativi a qualsiasi funzione. Abbiamo usato anche alcuni esempi di flag nel caso della lettura e della scrittura nel file. Entrambi gli esempi spiegati qui saranno utili per te nell'utilizzo di FCNTL nel linguaggio di programmazione C.