Funzione ReadLink C

Funzione ReadLink C

La funzione di readlink () del linguaggio di programmazione C viene utilizzata per inserire le informazioni del collegamento simbolico, che si riferisce ad un percorso, nel buffer. Leggere il contenuto di un collegamento simbolico viene definito "leggere un link" o "readlink". Il contenuto rimanente del buffer viene lasciato indeterminato se la lunghezza dei byte del collegamento simbolico è inferiore al buffer_size. In questo articolo, discuteremo alcuni esempi per illustrare il funzionamento della funzione di readlink C nel sistema Kali Linux. La sintassi della funzione ReadLink è indicata come segue:

La funzione ReadLink () si trova nel file di intestazione . Questo file di intestazione deve essere incluso sopra la funzione principale nel file di codice. Il buffer non contiene un carattere nullo dopo il risultato.

#includere
  • ssize_t readlink (const char *limit link_Pathname, CHAR *limitare respingente,
      • size_t dimensione buffer);

Il valore del collegamento simbolico viene abbreviato per adattarsi al buffer se è troppo breve per trattenerlo nella sua interezza (buffer_size). I byte di dimensioni del buffer iniziale devono essere aggiunti al buffer nel caso in cui l'argomento buffer non sia abbastanza grande da contenere il contenuto del collegamento. Se la dimensione del buffer è maggiore della dimensione massima, il risultato viene definito l'implementazione. Il numero di byte caricati nel buffer verrà restituito se readlink () viene eseguito correttamente. Altrimenti, deve restituire -1 e impostare ERRNO per identificare l'errore esatto e lasciare il buffer non modificato. Ecco l'elenco delle descrizioni degli errori insieme al codice:

  • Einval: Non esiste un collegamento simbolico nel file nominato.
  • EIO: La lettura dal file system ha comportato un errore di input o output.
  • Eacces: Un elemento del prefisso del percorso non ha il permesso di ricerca.
  • Eloop: In collegamenti simbolici, c'è un ciclo. Quando si risolve l'argomento del percorso, questo errore viene sollevato se si trovano più di collegamenti simbolici Symloop Posix.
  • Enoent: Non esiste un file come il link indicato.

Valutiamo la funzione ReadLink () in alcuni esempi. Crea un file di programmazione C nel terminale Linux utilizzando l'editor VIM. È possibile utilizzare Nano o qualsiasi altro editor per creare il file.

Tutti i file di intestazione sono inclusi nel codice seguente prima della funzione principale. Nella prima riga del blocco principale, la struttura "stat" viene dichiarata. Successivamente, viene dichiarato un puntatore del tipo di carattere, che viene successivamente utilizzato nella funzione ReadLink (). Stiamo usando ssize_t invece di un tipo di dati interi. È un tipo firmato. I loro valori massimi sono legati al fatto che il sistema operativo sia a 32 bit o 64 bit. Abbiamo dichiarato due variabili di questo tipo di dati: Buffer_Size e Nbytes (numero di byte).

Nella riga di codice successiva, abbiamo verificato il numero di argomenti forniti dalla riga di comando alla funzione principale. Se questo non è uguale a 2, il programma esce dalla funzione principale utilizzando la funzione di uscita, che visualizza anche un messaggio di errore. La posizione della memoria a cui si fa riferimento al buffer è dove le informazioni di stato per un determinato file vengono archiviate dopo essere state ottenute dalla funzione LSTAT (). Se il nome del file è il collegamento simbolico, questa funzione restituisce i dettagli sul collegamento simbolico stesso. Le informazioni restituite dalla funzione LSTAT sono sotto forma di una struttura stat, a cui si fa riferimento da un buffer.

I dati di stato per un determinato file vengono raccolti dalla funzione LSTAT () e inseriti nell'indirizzo di memoria indicato dal buffer. Questo metodo fornisce informazioni sul collegamento simbolico stesso se il nome del file è il collegamento simbolico. I dati restituiti dalla funzione LSTAT sono sotto forma di una struttura stat. Abbiamo aumentato la dimensione del tampone di uno.

In alcuni casi, la dimensione segnalata è zero, restituita dal legame simbolico. In quella situazione, impostare la dimensione del buffer sul valore path_max. Imposta il buffer usando l'allocazione della memoria, che utilizza buffer_size. Controlla se il buffer è nullo, quindi visualizzare un messaggio di errore. Chiama la funzione ReadLink e passa il percorso del collegamento di lettura, buffer e buffer_size su questa funzione. La funzione restituisce quanti byte sono stati restituiti nel percorso. Se il numero di byte è -1, quindi visualizzare l'errore, altrimenti visualizzare la posizione del punto del file collegato. Quindi, libera il buffer.

Compilare il file C utilizzando il compilatore GCC. Il readlink.Il file out contiene il risultato del file.

Nella prima esecuzione, passa il nome della directory, che non è il collegamento simbolico, quindi dà un errore che non esiste un tale file o directory.

Di seguito abbiamo superato la directory principale, che è un argomento non valido.

Ora che abbiamo superato il percorso, la funzione ReadLink restituisce il nome del collegamento simbolico a cui punta.

Usiamo un file C per costruire un file e un collegamento simbolico ad esso. Abbiamo creato un nome di file e un collegamento simbolico nella funzione principale. Crea il file con switch s iwuser utilizzando la funzione Crea. Un nuovo collegamento hard può essere realizzato su un file esistente utilizzando il metodo Link () della libreria C. Per creare un collegamento soft, utilizzare il metodo Symlink (). Non verrà sovrascritto se esiste già il file di collegamento o il percorso. In caso di successo, le funzioni link () e symlink () restituiscono entrambi 0.

Utilizzare il compilatore GCC per compilare il codice, quindi salvare i risultati in readlink1.File fuori.

Eseguire il codice. Ecco l'output:

Conclusione:

Si tratta dell'uso della funzione ReadLink () di C all'interno di alcuni degli esempi implementati sul sistema Kali Linux. Abbiamo elaborato il suo utilizzo, la sua sintassi e gli errori che contiene all'interno di alcuni degli esempi per essere più specifici e chiari.