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) .

Vedi anche libc (7) e vdso (7) .

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *