Ce este un apel de sistem în Linux și cum funcționează cu exemple

What Is System Call Linux



Un apel de sistem este o funcție care permite unui proces să comunice cu kernel-ul Linux. Este doar o modalitate programatică pentru un program de calculator de a comanda o facilitate din nucleul sistemului de operare. Apelurile de sistem expun resursele sistemului de operare programelor de utilizator printr-un API (Interfață de programare a aplicațiilor). Apelurile de sistem pot accesa doar cadrul nucleului. Apelurile de sistem sunt necesare pentru toate serviciile care au nevoie de resurse.

Kernel-ul Linux este un software propriu care încarcă și operează pe dispozitiv în stadiul cel puțin potențial. Sarcina sa este de a organiza tot ceea ce se întâmplă pe mașină, de la tastatură, unitate de disc și evenimente de rețea până la furnizarea de feluri de timp pentru executarea simultană a diferitelor programe. Separarea de software și hardware creează un balon sigur care îmbunătățește protecția și fiabilitatea. Aplicațiile neprivilegiate nu pot accesa spațiul de stocare al altui program și, dacă unul nu reușește, nucleul suspendă procesul, astfel încât să nu afecteze întregul sistem.







Înveliș subțire pentru napolitane:

Apelurile de sistem Linux nu sunt redate explicit către nucleu în anumite programe. Aproape toate programele folosesc biblioteca C de bază și oferă un înveliș ușor, dar esențial peste apelurile de sistem Linux. Depozitul furnizează apoi apelul de mașină Linux însoțitor după ce se asigură că parametrii caracteristicii sunt traduși în registrele procesorului corecte. Ori de câte ori ambalajul primește date de la apelul de sistem, acesta le analizează și le contribuie în mod clar la program. Orice operație interactivă a mașinii într-un program este convertită în cele din urmă într-un apel de sistem. Așadar, să aruncăm o privire asupra unora dintre ele. Există o listă lungă de apeluri de sistem Linux pe care le putem folosi în sistemul nostru Linux. Iată lista unor apeluri de sistem Linux obișnuite și cele mai utilizate.



  • Deschis
  • Închide
  • Exec
  • Scrie
  • Citit
  • Lseek
  • Selectați

Să discutăm câteva dintre apelurile de sistem Linux folosind limbajul C în articolul nostru pentru a ne ajuta cu el.



Deschidere apel sistem:

Putem folosi apelul de sistem Open în distribuția noastră Linux pentru a deschide rapid documentul, pe care îl vom specifica în codul nostru de limbă C. Lansați mai întâi terminalul de comandă. Puteți utiliza comanda rapidă Ctrl + Alt + T. Să presupunem că aveți un fișier text test.txt în directorul de pornire și conține un conținut în el. Deci, la început, trebuie să creați un nou nume de fișier de tip C new.c în terminal prin intermediul nano editor. Prin urmare, încercați instrucțiunile simple de mai jos nano.





$nanonou.c

Acum, editorul Nano a fost lansat. Introduceți codul de mai jos. Avem doi descriptori de fișiere în cod. Ambele fișiere pot fi deschise folosind apelul de sistem deschis. Primul descriptor conține un apel citit, iar al doilea conține funcția de scriere. Primul apel deschis deschide fișierul text test.txt și salvează conținutul acestuia în descriptorul de fișiere fd. Al doilea apel de sistem deschis creează un fișier numit țintă. Ținta documentului a fost rambursată unui descriptor de fișiere fd1. Instrucțiunea de scriere este utilizată pentru a transcrie octeții de date în buffer. Atingeți Ctrl + S pentru a salva codul și apăsați tasta de comandă rapidă Ctrl + X pentru a părăsi fișierul.



Rulați instrucțiunea de compilare gcc pentru a compila acest cod C.

$gccnou.c

Să executăm codul folosind interogarea simplă a.out din shell, după cum urmează:

$./a.out

Datele de ieșire au fost transmise către fișierul țintă. Să verificăm fișierul țintă folosind interogarea pentru pisici. Ecranul de ieșire arată cele 20 de caractere din fișierul țintă.

$pisicăţintă

Apel sistem Exec:

Apelul de sistem exec este respins pentru a rula un fișier care este în curs de procesare. Fostul fișier executabil este înlocuit, iar fișierul curent este operat ori de câte ori este apelat exec. Prin utilizarea unui apel de sistem exec, putem presupune că acest lucru va suprascrie vechiul document sau aplicație în buclă cu unul nou. Un nou software este utilizat pentru a suprascrie întregul material al procesului. Documentul al cărui titlu este dat în declarație ori de câte ori se invocă exec () este înlocuit cu secțiunea de informații despre utilizator care rulează apelul de sistem exec () (). Deci, deschideți terminalul de comandă și, utilizând editorul nano, creați un nou fișier de tip C după cum urmează:

$nanoexp.c

Editorul a fost deschis acum. Scrieți întregul cod de limbă C de mai jos. Există trei biblioteci principale incluse în acesta. După aceea, funcția principală a fost instanțiată. Declarația de tipărire a arătat datele șirului și ID-ul procesului fișierului exp.c. Funcția getpid () a fost utilizată în acest scop. Apoi avem o matrice de tipuri de caractere cu câteva valori în ea. Apelul de sistem exec a fost utilizat pentru a lua numele fișierului și matricea de o linie de deasupra ca argument. Acum fișierul hello.c va fi procesat. După aceea, o altă declarație tipărită vine până acum, dar nu va fi executată niciodată. Apăsați Ctrl + S pentru a salva acest fișier. Apăsați Ctrl + X pentru a ieși.

Acum este timpul să creați un alt fișier c, hello.c folosind editorul nano. Utilizați interogarea de mai jos din shell pentru a face acest lucru.

$nanobuna

Scrieți codul de mai jos în el. Acest cod conține două instrucțiuni de imprimare în funcția principală. Primul este doar tipărirea unui șir dat în acesta, iar al doilea tipărește șirul în timp ce preia ID-ul procesului fișierului utilizat în prezent, care este hello.c.

Să compilăm ambele fișiere unul după altul folosind gcc.

$gcc–O exp exp.c

$gcc–O buna buna buna.c

Când executăm fișierul exp.c, acesta va afișa prima declarație de imprimare din fișierul exp.c și ambele linii de imprimare din fișierul hello.c.

$./exp

Concluzie:

Am elaborat întregul concept de apeluri de sistem Linux și modul în care acestea pot fi utilizate în sistemul dvs. Linux. Am folosit Ubuntu 20.04 în timp ce implementăm acest concept.