2012-07-12 30 views
17

Estaba buscando el código fuente de las bibliotecas estándar de C. Lo que quiero decir con esto es, por ejemplo, cómo se escriben cos, abs, printf, scanf, fopen y todas las demás funciones estándar de C, quiero ver su código fuente.¿Qué es GLIBC? ¿Para qué se usa esto?

Al buscar esto, me encontré con GLIBC, pero no sé qué es en realidad. Es GNU C Library, y contiene algunos códigos fuente, pero ¿qué son en realidad, son el código fuente de las funciones estándar o son algo más? ¿Y para qué se usa?

+2

[Biblioteca GNU C] (http: //en.wikipedia.org/wiki/Glibc) - es, como dice el wiki, la implementación de GNU de la biblioteca estándar de C (con elementos adicionales que son específicos de la implementación de GNU). – birryree

+12

¿De verdad? Manteniendo el mouse sobre las [etiquetas] para esta pregunta le habría dado una respuesta. Usted hizo una [pregunta muy similar] (http://stackoverflow.com/questions/9672006/where-can-i-find-the-source-code-for-all-the-c-standard-libraries) recientemente. –

Respuesta

33

Es la implementación de la biblioteca Standard C descrita en los estándares C además de algunos productos adicionales útiles que no son estrictamente estándar pero se usan con frecuencia.

Sus principales contenidos son:

1) biblioteca C describe en ANSI, c99, c11 estándares. Incluye macros, símbolos, implementaciones de funciones, etc. (printf(), malloc(), etc.)

2) Biblioteca estándar POSIX. El pegamento "userland" de las llamadas al sistema. (abrir(), leer() etc. En realidad glibc no "implementa" llamadas al sistema. kernel lo hace. Pero glibc proporciona la interfaz terrestre del usuario a los servicios proporcionados por kernel para que la aplicación del usuario pueda usar una llamada al sistema como una ordinaria función.

3) También algunos productos no estándar pero útiles.

"utilizar la fuerza, leer la fuente"

$git clone git://sourceware.org/git/glibc.git 

(que era bastante poco iluminado cuando miré a través malloc.c en glibc)

1

Sí, es la implementación de funciones de biblioteca estándar.

Más específicamente, es la implementación para todos los sistemas GNU y en casi todos los sistemas * NIX que usan el kernel de Linux.

7

Hay varias implementaciones del estándar. Glibc es la implementación que usan la mayoría de los Linux, pero hay otros. Glibc también contiene (como afirma Aftnix) las funciones de pegamento que configuran la escena para los saltos en el kernel (también conocido como llamadas al sistema). Muchas de las 'funciones' de glibc no hacen el trabajo real, sino que solo delegan en el kernel.

Para leer la fuente de Glibc, solo busque google. Hay innumerables sitios que lo llevan, y también varias variaciones.

Windows usa la propia implementación de Microsoft, que creo que se llama MSVCR.DLL. Dudo que encuentres el código fuente de esa biblioteca en cualquier lugar. También tenga en cuenta que algunas funciones que un hacker de Linux podría considerar como 'estándar', simplemente no existen en Windows (especialmente fork). Lo contrario también es cierto.

Otros sistemas tendrán su propia libc.

+2

Microsoft envía el código fuente para el tiempo de ejecución de C con Visual Studio (incluso con la versión gratuita de Express, creo). Sin embargo, * no * incluye la fuente a las rutinas de coma flotante (o al menos una buena parte de ellas) por alguna razón. ¿Tal vez tienen licencia de un tercero que no permite la distribución de fuentes, tal vez? Me sorprendería si MS lo considerara una pieza de IP más importante que otras partes del tiempo de ejecución. –

6

El paquete glibc contiene bibliotecas estándar que son utilizadas por múltiples programas en el sistema. Con el fin de ahorrar espacio en disco y memoria, así como para facilitar la actualización, el código del sistema común se mantiene en un lugar y se comparte entre los programas. Este paquete particular contiene los conjuntos más importantes de bibliotecas compartidas: la biblioteca C estándar y la biblioteca matemática estándar. Sin estas dos bibliotecas, un sistema Linux no funcionará. El paquete glibc también contiene soporte de idioma nacional (locale).