2012-07-12 2 views
17

C 표준 라이브러리의 소스 코드를 찾고있었습니다. 필자가 말하고자하는 것은 cos, abs, printf, scanf, fopen 및 기타 모든 표준 C 함수가 어떻게 작성 되었는가, 즉 소스 코드를 보는 것입니다.GLIBC 란 무엇입니까? 그것은 무엇을 위해 사용됩니까?

이렇게 찾으면서 나는 GLIBC와 만났지만 실제로 무엇이 있는지 모른다. GNU C 라이브러리이며 일부 소스 코드가 포함되어 있지만 실제로는 표준 함수의 소스 코드입니까? 아니면 다른 것입니까? 그리고 그것은 무엇을 위해 사용됩니까?

+2

[GNU C 라이브러리] (http : //en.wikipedia.org/wiki/Glibc) 위키에서 GNU가 C 표준 라이브러리를 구현 한 것입니다 (GNU 구현에만 해당되는 추가 항목이 있음). – birryree

+12

정말요? 이 질문에 대해 [tags] 위로 마우스를 가져 가면 대답을 얻었을 것입니다. 당신은 최근 [매우 비슷한 질문] (http://stackoverflow.com/questions/9672006/where-can-i-find-the-source-code-for-all-the-c-standard-libraries)을 요청했습니다. –

답변

33

표준 C 라이브러리의 구현에 C 표준과 엄격하게 표준이 아니지만 자주 사용되는 몇 가지 유용한 것들이 설명되어 있습니다.

주요 내용은 다음과

1) C 라이브러리 ANSI, C99, C11의 기준으로 설명했다. 매크로, 기호, 함수 구현 등을 포함합니다. (printf(), malloc() 등)

2) POSIX 표준 라이브러리. 시스템 호출의 "사용자 영역"접착제. (open(), read() 등) 실제로 glibc는 시스템 호출을 "구현"하지 않지만 커널은 glibc를 사용하여 커널이 제공하는 서비스에 사용자 토지 인터페이스를 제공하므로 사용자 응용 프로그램은 일반 기능.

3) 또한 일부 비표준이지만 유용한 것들.

(난의 glibc에 malloc.c를 통해 보았을 때 나는 최근에 꽤 계몽이었다) 표준의 여러 구현이 있습니다

1

예, 표준 라이브러리 기능 구현입니다.

특히, 모든 GNU 시스템과 거의 모든 Linux 커널을 사용하는 * NIX 시스템에 대한 구현입니다.

7

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

는 "소스를 읽고 힘을 사용합니다." Glibc는 대부분의 리눅스가 사용하는 구현이지만 다른 것들도 있습니다. Glibc는 또한 Aftnix 상태에서 커널로 점프하기 위해 장면을 설정하는 접착제 함수 (시스템 호출이라고도 함)를 포함합니다. glibc의 '함수'는 실제 작업을 수행하지 않고 커널에만 위임합니다.

Glibc의 출처를 읽으려면 google을 읽으십시오. 그것을 운반하는 무수한 사이트와 여러 변형이 있습니다.

Windows는 MSVCR.DLL이라고하는 MS 자체 구현을 사용합니다. 나는 그 라이브러리에 대한 소스 코드를 어디서든지 찾을 수 있을지 의심 스럽다. 또한 리눅스 해커가 '표준'이라고 생각할 수도있는 일부 기능은 Windows (특히 포크)에 존재하지 않는다는 점에 유의하십시오. 그 반대도 마찬가지입니다.

다른 시스템에는 고유 한 libc가 있습니다.

+2

마이크로 소프트는 C 런타임 용 소스 코드를 Visual Studio와 함께 제공합니다 (무료 익스프레스 버전이라 할지라도). 그러나 어떤 이유로 든 부동 소수점 루틴에 소스를 포함하지 않습니다. 어쩌면 소스 배포를 허용하지 않는 제 3 자로부터 라이센스를받은 것일 수도 있습니다. MS가 런타임의 다른 부분보다 IP를 더 중요한 부분이라고 생각한다면 놀랄 것입니다. –

6

glibc 패키지에는 시스템의 여러 프로그램에서 사용하는 표준 라이브러리가 들어 있습니다. 디스크 공간과 메모리를 절약하고 업그레이드를 쉽게하기 위해 일반적인 시스템 코드는 한 곳에서 유지되고 프로그램간에 공유됩니다. 이 패키지는 가장 중요한 공유 라이브러리 집합 인 표준 C 라이브러리와 표준 수학 라이브러리를 포함합니다. 이 두 라이브러리가 없으면 Linux 시스템이 작동하지 않습니다. glibc 패키지는 또한 자국어 (로켈) 지원을 포함합니다.

관련 문제