एक अच्छा प्रारंभिक बिंदु पॉज़िक्स होगा। POSIX 2008 विनिर्देश यहाँ ऑनलाइन उपलब्ध है:
http://pubs.opengroup.org/onlinepubs/9699919799/
यह और अधिक सुलभ (लेकिन कभी कभी कम कठोर) सी मानक की तुलना में है, और सिर्फ सी मानक, यानी के मानकीकृत भागों के सबसे तुलना में बहुत अधिक शामिल किया गया यूनिक्स की तरह सिस्टम 'मानक पुस्तकालयों।
यदि आप कार्यान्वयन में रुचि रखते हैं, तो पहली बात यह जानना है कि POSIX- वर्णित व्यवहार आमतौर पर कर्नेल कार्यान्वयन और उपयोगकर्तास्पेस libc कार्यान्वयन के बीच विभाजित (व्यावहारिक और व्यावहारिक कारणों से) होता है। POSIX (और सी मानक से कुछ) में फ़ंक्शंस की एक बड़ी संख्या केवल "सिस्टम कॉल" के लिए रैपर होगी, यानी अनुरोध की सेवा के लिए कर्नलस्पेस में संक्रमण। कुछ libc कार्यान्वयन पर, इन रैपरों को भी ढूंढना मुश्किल होगा, क्योंकि वे अक्सर बिल्ड स्क्रिप्ट द्वारा स्वचालित रूप से जेनरेट होते हैं, और/या एक असेंबली-भाषा फ़ाइल में एकीकृत होते हैं।
प्रमुख (गैर कर्नेल कोड के महत्वपूर्ण राशि) मानक पुस्तकालय के उप आम तौर पर कर रहे हैं:
- stdio: glibc पर, यह जीएनयू libio पुस्तकालय, सी का एक एकीकृत कार्यान्वयन है जिसके द्वारा कार्यान्वित किया जाता है stdio और C++ iostream, अनुकूलित किया गया है ताकि दूसरे के लिए एक रैपर होने से न तो धीमा हो। यह एक बड़ा हैक है, और कोड ढूंढना और पालन करना मुश्किल है। अन्य कार्यान्वयन (विशेष रूप से बीएसडी, लेकिन लिनक्स पर अन्य libcs) पढ़ने के लिए बहुत सरल और स्पष्ट हैं। आखिरकार वे अंतर्निहित फाइल-डिस्क्रिप्टर आईओ फ़ंक्शंस जैसे
open
, read
, आदि पर आधारित हैं
- पॉज़िक्स धागे: ग्लिब और आधुनिक यूक्लिब पर, यह एनपीटीएल है। मैं बीएसडी के धागे कार्यान्वयन से परिचित नहीं हूं। अन्य लिनक्स libcs या तो धागे की कमी है या मुख्य रूप से लिनक्स
clone
और futex
syscalls पर आधारित अपने स्वयं के कार्यान्वयन प्रदान करते हैं।
- मठ पुस्तकालय: आखिरकार, इनमें से लगभग सभी पुराने सन गणित कोड पर 90 के दशक के प्रारंभ से आधारित हैं, लेकिन वे बहुत अलग हो गए हैं। Fdlibm आधुनिक libcs में उपयोग किए गए कोड का एक बहुत अच्छा आधार अनुमान है।
- उपयोगकर्ता, समूह, होस्टनाम (DNS), आदि लुकअप: यह glibss में libnss के माध्यम से और सीधे अन्य अधिकांश libcs में संभाला जाता है।
- नियमित अभिव्यक्ति और मिलान
- समय ग्लोब और समय क्षेत्र से निपटने
- लोकेल और चारसेट रूपांतरण
- Malloc
आप स्रोतों पढ़ने आरंभ करने के लिए चाहते हैं, तो मैं glibc के साथ शुरू नहीं की सिफारिश करेंगे। यह बहुत बड़ा और अनावश्यक है। यदि आप glibc को पढ़ना चाहते हैं, तो ध्यान रखें कि बहुत से कोड sysdeps पेड़ों के नीचे छिपा रहे हैं और यह उन प्रणालियों की विविधता के आधार पर व्यवस्थित है जो यह लागू है।
dietlibc काफी पठनीय है, लेकिन अगर आप अपने स्रोत से पढ़ते हैं, जानते हैं कि यह (जैसे int
जहां size_t
की जरूरत है, आदि का उपयोग कर अतिप्रवाह के लिए जाँच नहीं,) आम सी प्रोग्रामिंग गलतियों से भरा हुआ है हो सकता है। यदि आप इसे ध्यान में रखते हैं, तो यह एक खराब विकल्प नहीं हो सकता है, क्योंकि बहुत से संभावित त्रुटियों/असफलताओं को अनदेखा करना कोड को बहुत सरल बना देता है।
इसके साथ, libc स्रोत पढ़ने के लिए, मैं सबसे अधिक बीएसडी या musl (अस्वीकरण: मैं musl का प्राथमिक लेखक हूँ इसलिए मैं थोड़ा पक्षपातपूर्ण हूँ) की सिफारिश करता हूं। बीएसडी का भी लाभ है कि कर्नेलस्पेस कोड भी बेहद सरल और पठनीय है, इसलिए यदि आप सिस्टम कॉल के दूसरी तरफ कर्नेल कोड पढ़ना चाहते हैं, तो आप भी ऐसा कर सकते हैं।
कृपया फिर से खोलें। यह एकतरफा बंद करना मॉडरेटर शक्ति का दुरुपयोग था। मेरा मानना है कि यह सवाल पूरी तरह से उचित है, एसओ प्रारूप में उत्तरदायी है, और वास्तव में मेरे पास एक उत्तर है जिसे मुझे दुर्भाग्यपूर्ण एकपक्षीय निर्णय को बंद करने से अवरुद्ध कर दिया गया था। –
@ आर ..: ठीक है, ऐसा लगता है कि सवाल अब खुला है, आपको यहां टैग कर रहा है ताकि आपको एक अधिसूचना मिल सके और देखें कि प्रश्न फिर से खोला गया था =) – cha0site
@ cha0site: धन्यवाद! –