2012-07-12 33 views
17

C standart kitaplıklarının kaynak kodunu araştırıyordum. Demek istediğim, örneğin, cos, abs, printf, scanf, fopen ve diğer tüm standart C fonksiyonlarının nasıl yazıldığını, yani kaynak kodlarını görmek istiyorum.GLIBC nedir? Ne için kullanılır?

Bunu ararken, GLIBC ile karşılaştım, ama aslında ne olduğunu bilmiyorum. Bu GNU C kütüphanesidir ve bazı kaynak kodları içerir, fakat aslında bunlar standart fonksiyonların kaynak kodları mıdır yoksa başka bir şey midir? Ve ne için kullanılır?

+2

[GNU C Kütüphanesi] (http: //en.wikipedia.org/wiki/Glibc) - wiki'nin belirttiği gibi, GNU'nun C standart kütüphanesinin uygulanması (GNU uygulamasına özgü ek şeylerle). – birryree

+12

Gerçekten mi? Bu soru için fareyi [tags] 'in üzerinde tutmak size bir cevap verebilirdi. Son zamanlarda çok benzer bir soru sordunuz (http://stackoverflow.com/questions/9672006/where-can-i-find-the-source-code-for-all-the-c-standard-libraries). –

cevap

33

Onun C standartları artı kesinlikle standart ama sık kullanılan olmayan bazı ekstra yararlı maddeleri tarif Standart C kütüphanesinde uygulanması.

Ana içeriği:

1) C kütüphanesi ANSI, C99, C11 standartları tarif edilmiştir. Makroları, sembolleri, işlev uygulamalarını içerir. (Printf(), malloc() vb.)

2) POSIX standart kitaplığı. Sistemin "userland" tutkalı çağırır. (open(), read() vb. Aslında glibc, sistem çağrılarını "yürütmez" demez.Kernel bunu yapar. Ancak glibc, kullanıcı arabiriminin çekirdek tarafından sağlanan hizmetlere kullanıcı arabirimi sağlar, böylece kullanıcı uygulaması, sıradan bir sisteme benzer bir sistem çağrısını kullanabilir 3) Ayrıca bazı standart olmayan ancak yararlı maddeler.

(i glibc'de malloc.c aracılığıyla baktığında Geçenlerde oldukça aydınlanmış oldu) standardının değişik uygulamaları vardır

1

Evet, standart kitaplık işlevlerinin uygulanması. Daha spesifik olarak, tüm Linux sistemleri için ve Linux çekirdeğini kullanan hemen hemen tüm * NIX sistemlerinde uygulanmaktadır.

7

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

"kaynak okumak, güç kullanmak". Glibc, çoğu Linux'un kullandığı bir uygulamadır, ancak diğerleri vardır. Glibc ayrıca (Aftnix durumları olarak) çekirdeği atlamak için sahneyi (sistem çağrıları olarak da bilinir) yerleştiren tutkal işlevlerini de içerir. Birçok glibc'in 'işlevleri', gerçek işi yapmaz, sadece çekirdeğe delege eder.

Glibc kaynağını okumak için, bunun için sadece google. Onu taşıyan sayısız siteler ve ayrıca çeşitli varyasyonlar vardır.

Windows, Microsoft'un MSVCR.DLL adı verilen kendi uygulamasını kullanmaktadır. Kaynak kodunu o kütüphaneye her yerde bulacağınızdan şüpheliyim. Ayrıca, bir Linux korsanın 'standart' olarak düşünebileceği bazı işlevlerin, sadece Windows'ta (özellikle çatalda) bulunmadığını unutmayın. Tersi de doğrudur.

Diğer sistemlerin kendi libc'si olacaktır.

+2

Microsoft, C çalışma zamanı kaynak kodunun Visual Studio'yu (ücretsiz Express sürümünde bile olsa) kaynak olarak gönderir. Bununla birlikte, bir sebepten dolayı kayan nokta rutinlerine (veya bunların en azından adil bir yığınına) kaynağı dahil etmez. Belki de kaynak dağıtımına izin vermeyen üçüncü taraflardan lisanslanmış olabilirler? MS, onlara çalışma zamanının diğer bölümlerinden daha önemli bir IP düşünmüş olsaydı şaşırırdım. –

6

glibc paketi, sistemde birden çok program tarafından kullanılan standart kitaplıkları içerir. Disk alanı ve hafızayı korumak, yükseltmeyi kolaylaştırmak, ortak sistem kodunu tek bir yerde işleyip programların arasında paylaşabilmek için. Bu özel paket en önemli paylaşılan kütüphane kümelerini içerir: standart C kütüphanesi ve standart matematik kütüphanesi. Bu iki kütüphane olmadan, bir Linux sistemi çalışmayacaktır. Glibc paketi ayrıca ulusal dil (yerel) desteği de içerir.