Uneori văd că acești doi termeni sunt folosiți interschimbabil.

Care este diferența reală dintre acești doi termeni? Cum se folosesc diferit? Există alte alternative la aceste două biblioteci?

Comentarii

  • Presupun că ați efectuat o căutare online înainte de a întreba aici. Ce ai găsit până acum? Cum aceste informații nu răspund la întrebarea dvs.? Vă rugăm să editați întrebarea pentru a vă arăta efortul, astfel încât răspunsurile să nu ' nu trebuie să repete ceva ce știți deja . Vedeți și: Cum pun o întrebare bună?

Răspuns

Biblioteca standard C face parte din limbajul de programare C, deci este o specificație (scrisă în engleză într-un raport tehnic). De exemplu, documentul n1570 explică ce este malloc și cum ar trebui să se comporte.

Există, de asemenea, o altă specificație relevantă, biblioteca POSIX (care este mai mult sau mai puțin un superset al bibliotecii standard C). De exemplu, ambele dlopen și fork sunt specificate de POSIX (dar ignorate de standardul C11).

GNU biblioteca glibc este o implementare a (un superset) a bibliotecii standard C și a bibliotecii C POSIX. Este un software gratuit (majoritatea scris în C pentru dialectul GCC cu un pic de asamblare). Folosește apeluri de sistem (listate în syscalls (2) ) procesate de kernel . Puteți utiliza o altă implementare a bibliotecii standard C, cum ar fi musl-libc (sau dietlibc ).

Ați putea evita orice libc și puteți efectua apeluri directe de sistem către kernel scriind codul de asamblare. Acest lucru se face rar (un exemplu este compilatorul schemei Bones sau BusyBox ). Majoritatea programelor fac apeluri de sistem prin libc și profită de funcțiile oferite de acel libc. Prin urmare, libc este piatra de temelie a sistemelor Linux …

Apropo, GNU glibc are funcții utile în afara standardului, astfel ca funcții backtrace sau câteva modalități suplimentare de a analiza argumentele programului .

Observați că există diferențe subtile între ceea ce cere standardul și ceea ce se întâmplă în practică (de exemplu, supra-angajamentul de memorie afectează malloc într-un mod non-standard sau Linux dlopen are mai multe steaguri decât ceea ce necesită POSIX .

Th man paginile de pe Linux explică în general modul în care conformarea standard este o funcție. Căutați de exemplu în dlopen (3) .

Vedeți și libc (7) și vdso (7) .

Răspuns

Fiecare implementare C trebuie să furnizeze biblioteca standard, dar nu fiecare compilator C este scris de FSF! Așadar, compilatorul GNU C va utiliza biblioteca GNU C, iar compilatorul C al Intel folosește o bibliotecă standard diferită (cu un nume mai puțin atrăgător). Ambele vor fi instanțieri ale bibliotecii standard pe care standardul C o cere.

Răspuns

Dacă citiți „UNIX” pentru „GNU”, pentru o lungă perioadă de timp termenii au fost interschimbabili deoarece erau același lucru.

Până când BSD a ieșit de la sol, biblioteca UNIX a & T „a fost biblioteca THE C – deoarece compilatorul lor a fost Compilatorul C (în cea mai mare parte).

După BSD, ați avut System V UNIX, BSD UNIX, GNU (GNU „s Unix) și destul de curând au existat compilatoare C peste tot, fiecare cu propria implementare a bibliotecii standard.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *