Às vezes, vejo esses dois termos serem usados de forma intercambiável.

Qual é a diferença real entre esses dois termos? Como eles são usados de forma diferente? Existem outras alternativas para essas duas bibliotecas?

Comentários

  • Suponho que você tenha feito uma pesquisa online antes de perguntar aqui. O que você encontrou até agora? Como essa informação não responde à sua pergunta? edite a pergunta para mostrar seu esforço, de modo que as respostas não ' precisem repetir algo que você já conhece . Veja também: Como faço uma boa pergunta?

Resposta

A biblioteca padrão C faz parte da linguagem de programação C, portanto é uma especificação (escrita em inglês em algum relatório técnico). Por exemplo, o documento n1570 explica o que é malloc e como deve se comportar.

Há também outra especificação relevante, a biblioteca C POSIX (que é mais ou menos um superconjunto da biblioteca padrão C). Por exemplo, dlopen e fork são especificados por POSIX (mas ignorados pelo padrão C11).

O GNU A biblioteca glibc é uma implementação de (um superconjunto) da biblioteca padrão C e da biblioteca C POSIX. É algum software livre (escrito principalmente em C para o dialeto GCC com um pouco de assembler). Ele usa chamadas do sistema (listadas em syscalls (2) ) processadas pelo kernel . Você pode usar alguma outra implementação da biblioteca padrão C, como musl-libc (ou dietlibc ).

Você pode evitar qualquer libc e fazer chamadas de sistema diretas para o kernel escrevendo código assembler. Isso raramente é feito (um exemplo é o compilador de esquema Bones ou BusyBox ). A maioria dos programas faz chamadas de sistema por meio de libc e aproveita as funções fornecidas por esse libc. Portanto, libc é a pedra angular dos sistemas Linux …

A propósito, o GNU glibc tem funções úteis fora do padrão, como como funções de backtrace ou algumas maneiras adicionais de analisar argumentos do programa .

Observe que há diferenças sutis entre o que o padrão exige e o que acontece na prática (por exemplo, supercomprometimento de memória afeta malloc de uma forma não padrão ou Linux dlopen tem mais sinalizadores do que o POSIX requer).

As man páginas no Linux em geral explicam como a conformidade com o padrão é uma função. Procure por exemplo em dlopen (3) .

Veja também libc (7) e vdso (7) .

Resposta

Cada implementação de C deve fornecer a biblioteca padrão, mas nem todo compilador C é escrito pela FSF! Portanto, o compilador GNU C usará a biblioteca GNU C, e o compilador C da Intel usa uma biblioteca padrão diferente (com um nome menos atraente). Ambos serão instanciações da biblioteca padrão que o padrão C requer.

Resposta

Se você leu “UNIX” para “GNU”, por muito tempo os termos foram intercambiáveis porque eram a mesma coisa.

Até o BSD decolar, a biblioteca UNIX da AT & T “T era A biblioteca C – porque seu compilador era O compilador C (na maior parte).

Depois do BSD, você tinha o System V UNIX, o BSD UNIX, o GNU (GNU não é Unix) e logo surgiram os compiladores C em todos os lugares, cada um com sua própria implementação da biblioteca padrão.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *