2012-07-12 18 views
17

Szukałem kodu źródłowego standardowych bibliotek C. Mam na myśli, na przykład, w jaki sposób są napisane cos, abs, printf, scanf, fopen i wszystkie inne standardowe funkcje języka C, to znaczy widzę ich kod źródłowy.Co to jest GLIBC? Do czego jest to używane?

Szukając tego, natknąłem się na GLIBC, ale nie wiem, co to jest. Jest to biblioteka GNU C i zawiera kilka kodów źródłowych, ale czym właściwie one są, czy są one kodem źródłowym standardowych funkcji, czy też są czymś innym? I do czego służy?

+2

[Biblioteka GNU C] (http: //en.wikipedia.org/wiki/Glibc) - to, jak stwierdza wiki, implementacja biblioteki standardowej języka C (z dodatkowymi rzeczami specyficznymi dla implementacji GNU). – birryree

+12

Naprawdę? Przytrzymanie myszki nad [znacznikami] dla tego pytania dałoby ci odpowiedź. Pytałeś ostatnio bardzo [bardzo podobne pytanie] (http://stackoverflow.com/questions/9672006/where-can-i-find-the-source-code- for-all-the-c-standard-libraries). –

Odpowiedz

33

Jego implementacja Standardowa biblioteka C opisana w standardach C plus dodatkowe przydatne rzeczy, które nie są ściśle standardowe, ale często używane.

Główne zawartość:

1) C biblioteki opisanych w ANSI, C99, C11 standardów. Zawiera makra, symbole, implementacje funkcji itp. (Printf(), malloc() itp.)

2) standardowa biblioteka POSIX. Klej "systemowy" wywołań systemowych. (open(), read() itd. Właściwie glibc nie "realizuje" wywołań systemowych, ale jądro to robi, ale glibc zapewnia interfejs użytkownika do usług dostarczanych przez jądro, dzięki czemu aplikacja użytkownika może używać wywołania systemowego tak jak zwykły funkcja

3) Również niektóre niestandardowe, ale przydatne rzeczy.

„użyć siły, czytać źródła”

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

(Byłem niedawno dość światły kiedy przejrzałem malloc.c w glibc)

1

Tak, jest to implementacja standardowych funkcji bibliotecznych.

Dokładniej, jest to implementacja dla wszystkich systemów GNU i prawie wszystkich systemów * NIX, które używają jądra Linux.

7

Istnieje kilka implementacji standardu. Glibc jest implementacją, której używa większość Linuksów, ale są też inne. Glibc zawiera również (jako stany Aftnix) funkcje kleju, które konfigurują scenę dla skoków do jądra (zwanych również wywołaniami systemowymi). Tak wiele "funkcji" glibc nie wykonuje rzeczywistej pracy, a jedynie przekazuje ją do jądra.

Aby przeczytać źródło Glibc, po prostu google. Istnieją miriady witryn, które go niosą, a także kilka odmian.

Windows korzysta z własnej implementacji Microsoftu, która, jak mi się wydaje, nazywa się MSVCR.DLL. Wątpię, że znajdziesz kod źródłowy do tej biblioteki w dowolnym miejscu. Zwróć też uwagę, że niektóre funkcje, które haker Linuks może uważać za "standardowy", po prostu nie istnieją w systemie Windows (szczególnie w widłach). Odwrotna też jest prawda.

Inne systemy będą miały własną bibliotekę.

+2

Firma Microsoft dostarcza kod źródłowy dla środowiska wykonawczego C za pomocą programu Visual Studio (jak sądzę, nawet z darmową wersją Express). Jednak nie * włącza * źródła do procedur zmiennoprzecinkowych (lub przynajmniej ich sporej części) z jakiegoś powodu. Może są one licencjonowane przez firmę zewnętrzną, która nie pozwala na dystrybucję źródła? Byłbym zaskoczony, gdyby MS uznało je za ważniejszą część IP niż inne części środowiska wykonawczego. –

6

Pakiet glibc zawiera standardowe biblioteki używane przez wiele programów w systemie. Aby zaoszczędzić miejsce na dysku i pamięć, a także ułatwić aktualizację, wspólny kod systemowy jest przechowywany w jednym miejscu i współdzielony między programami. Ten konkretny pakiet zawiera najważniejsze zestawy bibliotek współdzielonych: standardową bibliotekę C i standardową bibliotekę matematyczną. Bez tych dwóch bibliotek system Linux nie będzie działał. Pakiet glibc zawiera również obsługę języka narodowego (locale).