Cos'è una chiamata di sistema in Linux e come funziona con esempi

Cos'è una chiamata di sistema in Linux e come funziona con esempi

Una chiamata di sistema è una funzione che consente a un processo di comunicare con il kernel Linux. È solo un modo programmatico per un programma per computer di ordinare una struttura dal kernel del sistema operativo. Le chiamate di sistema espongono le risorse del sistema operativo ai programmi utente tramite un'API (interfaccia di programmazione dell'applicazione). Le chiamate di sistema possono accedere solo al framework del kernel. Sono necessarie chiamate di sistema per tutti i servizi che necessitano di risorse.

Il kernel Linux è un software proprietario che carica e opera sul dispositivo almeno potenziale stadio. Il suo compito è organizzare tutto ciò che accade sulla macchina, dalla tastiera, dall'unità disco e dagli eventi di rete alla fornitura di fette di tempo per l'esecuzione simultanea di diversi programmi. La separazione di software e hardware crea una bolla sicura che migliora la protezione e l'affidabilità. Le applicazioni non privilegiate non sono in grado di raggiungere l'archiviazione di altri programmi e, se si guasta, il kernel sospende il processo in modo che non danneggi l'intero sistema.

Wafer wrapper sottile:

Le chiamate di sistema Linux non sono rese esplicitamente al kernel in determinati programmi. Quasi tutti i programmi utilizzano la libreria C di base e offrono un wrapper leggero ma essenziale sulle chiamate del sistema Linux. Il repository fornisce quindi la chiamata della macchina Linux di accompagnamento dopo aver assicurato che i parametri della funzionalità siano tradotti nei registri del processore giusto. Ogni volta che il wrapper riceve i dati dalla chiamata di sistema, li analizza e li contribuisce chiaramente al programma. Qualsiasi operazione di intervallo macchina in un programma viene infine convertita in una chiamata di sistema. Quindi, diamo un'occhiata ad alcuni di loro. C'è un lungo elenco di chiamate di sistema Linux che possiamo utilizzare nel nostro sistema Linux. Ecco l'elenco di alcune chiamate di sistema Linux comuni e per lo più utilizzate.

  • Aprire
  • Vicino
  • Exec
  • Scrivere
  • Leggere
  • LSEEK
  • Selezionare

Discutiamo alcune delle chiamate del sistema Linux usando la lingua C nel nostro articolo per metterti in giro con esso.

Chiamata di sistema aperto:

Possiamo utilizzare la chiamata di sistema "aperta" nella nostra distribuzione Linux per aprire rapidamente il documento, che specificheremo nel nostro Codice di lingua C. Avvia prima il terminale di comando. È possibile utilizzare il collegamento "ctrl+alt+t". Supponiamo di avere un file di testo "Test.txt "nella home directory, e contiene alcuni contenuti in esso. Quindi, all'inizio, devi creare un nuovo nome file C “Nuovo.C "nel terminale tramite Nano Editor. Pertanto, prova la semplice istruzione nano sotto.

$ nano nuovo.C

Ora, il nano editore è stato lanciato. Digita il codice di seguito in esso. Abbiamo due descrittori di file nel codice. Entrambi i file possono essere aperti utilizzando la chiamata di sistema aperta. Il primo descrittore contiene una chiamata di lettura e il secondo contiene la funzione di scrittura. La prima chiamata aperta sta aprendo il file di testo "Test.txt "e salvando il suo contenuto in file descrittore" fd ". La seconda chiamata di sistema aperto sta creando un file denominato "target". Il documento "Target" è stato rimborsato a un descrittore di file "FD1". L'istruzione di scrittura viene utilizzata per trascrivere i byte di dati nel buffer. Tocca "Ctrl+S" per salvare il codice e premere il tasto di scelta rapida "Ctrl+X" per lasciare il file.

Esegui l'istruzione di compilazione GCC per compilare questo codice C.

$ GCC nuovo.C

Eseguiamo il codice utilizzando il semplice "a.fuori ”query nel guscio come segue:

$ ./UN.fuori

I dati di output sono stati trasmessi al file "target". Controlliamo il file "target" usando la query "cat". La schermata di output mostra i dati di 20 caratteri nel file "target".

$ cat target

Chiamata del sistema Exec:

La chiamata del sistema Exec viene lanciata per eseguire un file che è attualmente in fase di elaborazione. Il primo file eseguibile viene sostituito e il file corrente viene gestito ogni volta che viene chiamato. Utilizzando una chiamata di sistema Exec, possiamo supporre che ciò sovrascriverà il vecchio documento o l'applicazione nel ciclo con uno nuovo. Il nuovo software viene utilizzato per sovrascrivere il materiale dell'intero processo. Il documento il cui titolo è riportato nell'istruzione ogni volta che invocano Exec () viene sostituito con la sezione Informazioni sull'utente che esegue la chiamata di sistema EXEC () (). Quindi aprire il terminale di comando e, usando l'editor Nano, crea un nuovo file di tipo C come segue:

$ nano exp.C

L'editore è stato aperto ora. Scrivi l'intero codice di lingua C sotto in esso. Ci sono tre biblioteche principali incluse in esso. Successivamente, la funzione principale è stata istanziata. L'istruzione di stampa ha mostrato i dati della stringa e l'ID processo del file "Exp.C". La funzione getpid () è stata utilizzata per questo scopo. Quindi abbiamo un array di tipo di carattere con alcuni valori in esso. La chiamata del sistema Exec è stata utilizzata per prendere il nome del file e l'array sopra una riga come argomento. Ora il file "Ciao.c ”verrà elaborato. Dopodiché, un'altra dichiarazione di stampa arriva così lontano, ma non verrà mai eseguita. Premere "Ctrl+S" per salvare questo file. Premi "Ctrl+X" per uscire.

Ora è il momento di creare un altro file C, "Ciao.C "usando il nano editor. Usa la query seguente nella shell per farlo.

$ nano ciao.C

Scrivi il codice seguente in esso. Questo codice contiene due istruzioni di stampa nella funzione principale. Il primo è stampare solo una stringa fornita in essa e la seconda sta stampando la stringa mentre si ottiene l'ID processo del file attualmente usato, che è "ciao.C".

Compiliamo entrambi i file uno dopo l'altro usando GCC.

$ gcc -o exp exp.C
$ gcc -o ciao ciao.C

Quando eseguiamo Exp.C file, emetterà la prima istruzione di stampa da Exp.F del file ed entrambe le righe di stampa dal ciao.file c.

$ ./Exp

Conclusione:

Abbiamo elaborato l'intero concetto di chiamate di sistema Linux e come possono essere utilizzate nel tuo sistema Linux. Abbiamo usato Ubuntu 20.04 durante l'implementazione di questo concetto.