A volte vedo che questi due termini vengono usati in modo intercambiabile.
Qual è la differenza effettiva tra questi due termini? Come vengono utilizzati in modo diverso? Esistono altre alternative a queste due librerie?
Commenti
- Presumo che tu abbia eseguito una ricerca online prima di chiedere qui. Cosa hai trovato finora? In che modo queste informazioni non rispondono alla tua domanda? modifica la domanda per mostrare il tuo impegno, in modo che le risposte non ' debbano ripetere qualcosa che già conosci . Vedi anche: Come faccio a fare una buona domanda?
Risposta
La libreria standard C fa parte del linguaggio di programmazione C, quindi è una specifica (scritta in inglese in qualche relazione tecnica). Ad esempio, il documento n1570 spiega cosè malloc
e come dovrebbe comportarsi.
Cè anche unaltra specifica rilevante, la libreria POSIX C (che è più o meno un superset della libreria standard C). Ad esempio, sia dlopen
e fork
sono specificati da POSIX (ma ignorati dallo standard C11).
GNU La libreria glibc è unimplementazione (un superset della) libreria standard C e della libreria C POSIX. È un po di software libero (per lo più scritto in C per il dialetto GCC con un po di assembler). Utilizza chiamate di sistema (elencate in syscalls (2) ) elaborate da kernel . Potresti utilizzare unaltra implementazione della libreria standard C, come musl-libc (o dietlibc ).
Potresti evitare qualsiasi libc
ed effettuare chiamate di sistema dirette al kernel scrivendo codice assembler. Questa operazione viene eseguita raramente (un esempio è il compilatore dello schema Bones o BusyBox ). La maggior parte dei programmi effettua chiamate di sistema tramite libc
e sfrutta le funzioni fornite da questo libc
. Quindi libc
è una pietra angolare dei sistemi Linux …
A proposito, GNU glibc ha funzioni utili al di fuori dello standard, come come funzioni di backtrace o altri modi per analizzare gli argomenti del programma .
Nota che ci sono sottili differenze tra ciò che lo standard richiede e ciò che accade nella pratica (ad esempio, overcommitment di memoria influisce su malloc
in un modo non standard, o Linux dlopen
ha più flag di quanto richiesto da POSIX ).
Le man
pagine su Linux in generale spiegano come la conformità agli standard sia una funzione. Cerca ad esempio dlopen (3) .
Risposta
Ogni implementazione di C deve fornire la libreria standard, ma non tutti i compilatori C sono scritti dalla FSF! Quindi il compilatore GNU C utilizzerà la libreria GNU C e il compilatore C di Intel utilizza una libreria standard diversa (con un nome meno accattivante). Entrambi saranno istanze della libreria standard richiesta dallo standard C.
Risposta
Se leggi “UNIX” per “GNU”, per molto tempo i termini sono stati intercambiabili perché erano la stessa cosa.
Fino a quando BSD non è decollato, la libreria UNIX di AT & T “era LA libreria C, perché il loro compilatore era IL compilatore C (per la maggior parte).
Dopo BSD, poi avevate System V UNIX, BSD UNIX, GNU (GNU “s Not Unix), e ben presto cerano i compilatori C ovunque, ciascuno con la propria implementazione della libreria standard.