Je vois parfois ces deux termes être utilisés de manière interchangeable.
Quelle est la différence réelle entre ces deux termes? Comment sont-ils utilisés différemment? Existe-t-il dautres alternatives à ces deux bibliothèques?
Commentaires
- Je suppose que vous avez effectué une recherche en ligne avant de demander ici. Quavez-vous trouvé jusquici? Comment cette information ne répond-elle pas à votre question? Veuillez modifier la question pour montrer votre effort, afin que les réponses ' naient pas à répéter quelque chose que vous connaissez déjà . Voir aussi: Comment poser une bonne question?
Réponse
La bibliothèque standard C fait partie du langage de programmation C, il sagit donc dune spécification (écrite en anglais dans un rapport technique). Par exemple, le document n1570 explique ce quest malloc
et comment il doit se comporter.
Il existe également une autre spécification pertinente, la bibliothèque C POSIX (qui est plus ou moins un sur-ensemble de la bibliothèque standard C). Par exemple, dlopen
et fork
sont spécifiés par POSIX (mais ignorés par le standard C11).
Le GNU La bibliothèque glibc est une implémentation de (un sur-ensemble de) la bibliothèque standard C et de la bibliothèque C POSIX. Cest un logiciel libre (principalement écrit en C pour le dialecte GCC avec un peu dassembleur). Il utilise des appels système (répertoriés dans syscalls (2) ) traités par noyau . Vous pouvez utiliser une autre implémentation de la bibliothèque standard C, comme musl-libc (ou dietlibc ).
Vous pouvez éviter tout libc
et faire des appels système directs au noyau en écrivant du code assembleur. Cela est rarement fait (un exemple est le compilateur Scheme Bones , ou BusyBox ). La plupart des programmes font des appels système via libc
et tirent parti des fonctions fournies par ce libc
. Par conséquent, libc
est une pierre angulaire des systèmes Linux …
Au fait, la glibc GNU a des fonctions utiles en dehors du standard, comme en tant que fonctions de suivi , ou quelques moyens supplémentaires pour analyser les arguments du programme .
Notez quil existe des différences subtiles entre ce que la norme exige et ce qui se passe dans la pratique (par exemple, surengagement de la mémoire affecte malloc
dune manière non standard, ou Linux dlopen
a plus dindicateurs que ce que POSIX exige).
Les pages man
sur Linux expliquent en général comment la conformité standard est une fonction. Regardez par exemple dans dlopen (3) .
Réponse
Chaque implémentation de C doit fournir la bibliothèque standard, mais tous les compilateurs C ne sont pas écrits par la FSF! Ainsi, le compilateur GNU C utilisera la bibliothèque GNU C, et le compilateur C dIntel utilise une bibliothèque standard différente (avec un nom moins accrocheur). Les deux seront des instanciations de la bibliothèque standard requise par le standard C.
Réponse
Si vous lisez « UNIX » pour « GNU », pendant longtemps les termes étaient interchangeables car cétait la même chose.
Jusquà ce que BSD décolle, la bibliothèque UNIX dAT & T « était LA bibliothèque C – parce que leur compilateur était LE compilateur C (pour la plupart).
Après BSD, vous avez eu System V UNIX, BSD UNIX, GNU (GNU « s Not Unix), et très bientôt il y a eu des compilateurs C partout, chacun avec sa propre implémentation de la bibliothèque standard.