सी मानक लाइब्रेरी: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Standard library for the C programming language}} {{C Standard Library}} C मानक पुस्तकालय या libc, C (प्रोग्...")
 
No edit summary
 
(12 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Standard library for the C programming language}}
{{Short description|Standard library for the C programming language}}
{{C Standard Library}}
{{C Standard Library}}
C [[मानक पुस्तकालय]] या libc, C (प्रोग्रामिंग भाषा) के लिए मानक पुस्तकालय है, जैसा कि [[ISO C]] मानक में निर्दिष्ट है।<ref name="c17io">[[International Organization for Standardization|ISO]]/[[International Electrotechnical Commission|IEC]] (2018). ''[[C17_(C_standard_revision)|ISO/IEC 9899:2018(E): Programming Languages - C]] §7''</ref> मूल [[एएनएसआई सी]] मानक से शुरू होकर, इसे उसी समय [[सी पॉज़िक्स लाइब्रेरी]] के रूप में विकसित किया गया था, जो इसका एक सुपरसेट है।<ref>{{cite web
सी [[मानक पुस्तकालय|मानक लाइब्रेरी]] या लिबक, सी (प्रोग्रामिंग भाषा) के लिए मानक लाइब्रेरी है। जैसा कि [[ISO C|आईएसओ सी]] मानक में निर्दिष्ट है।<ref name="c17io">[[International Organization for Standardization|ISO]]/[[International Electrotechnical Commission|IEC]] (2018). ''[[C17_(C_standard_revision)|ISO/IEC 9899:2018(E): Programming Languages - C]] §7''</ref> मूल [[एएनएसआई सी]] मानक से प्रारंभ होकर इसे उसी समय [[सी पॉज़िक्स लाइब्रेरी|सी लाइब्रेरी पॉज़िक्स]] विनिर्देश के रूप में विकसित किया गया था। जो इसका सुपरसमूह है।<ref>{{cite web
  | url = http://ftp.gnu.org/old-gnu/Manuals/glibc-2.2.3/html_chapter/libc_1.html
  | url = http://ftp.gnu.org/old-gnu/Manuals/glibc-2.2.3/html_chapter/libc_1.html
  | title = The GNU C Library – Introduction
  | title = The GNU C Library – Introduction
Line 11: Line 11:
  | year = 2012 | access-date = 2015-03-04
  | year = 2012 | access-date = 2015-03-04
  | website = stackoverflow.com
  | website = stackoverflow.com
}}</ref> चूंकि एएनएसआई सी को मानकीकरण के लिए अंतर्राष्ट्रीय संगठन द्वारा अपनाया गया था,<ref name="ISOAdoptedAnsiC">{{cite web |title=C Standards |url=http://www.keil.com/support/docs/1893.htm |url-status=live |access-date=24 November 2011 |website=C: C Standards |publisher=Keil |language=en-US}}</ref> सी मानक पुस्तकालय को आईएसओ सी पुस्तकालय भी कहा जाता है।
}}</ref> चूंकि एएनएसआई सी को मानकीकरण के लिए अंतर्राष्ट्रीय संगठन द्वारा अपनाया गया था।<ref name="ISOAdoptedAnsiC">{{cite web |title=C Standards |url=http://www.keil.com/support/docs/1893.htm |url-status=live |access-date=24 November 2011 |website=C: C Standards |publisher=Keil |language=en-US}}</ref> अतः सी मानक लाइब्रेरी को आईएसओ सी लाइब्रेरी भी कहा जाता है।


सी मानक पुस्तकालय [[मैक्रो (कंप्यूटर विज्ञान)]] एस, [[डेटा प्रकार]] की परिभाषाएं और कार्य जैसे [[चरित्र स्ट्रिंग (कंप्यूटर विज्ञान)]] हैंडलिंग, गणितीय संगणना, इनपुट / आउटपुट प्रोसेसिंग, मेमोरी प्रबंधन, और कई अन्य [[ऑपरेटिंग सिस्टम]] सेवाएं प्रदान करता है।
सी मानक लाइब्रेरी  हैंडलिंग, गणितीय संगणना, इनपुट / आउटपुट प्रोसेसिंग, मेमोरी प्रबंधन, और कई अन्य [[ऑपरेटिंग सिस्टम]] सेवाओं  जैसे [[मैक्रो (कंप्यूटर विज्ञान)|मैक्रो (कंप्यूटर विज्ञान),]] प्रकार की परिभाषाएं और फ़ंक्शन प्रदान करता है।


== एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस ==
== एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) ==


=== {{Anchor|headers}}शीर्षलेख फ़ाइलें ===
=== शीर्षलेख फ़ाइलें ===
   
   
सी मानक लाइब्रेरी का [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] (एपीआई) कई शीर्षलेख फ़ाइलों में घोषित किया गया है। प्रत्येक शीर्ष लेख फ़ाइल में एक या अधिक फ़ंक्शन घोषणाएँ, डेटा प्रकार परिभाषाएँ और मैक्रोज़ होते हैं।
सी मानक लाइब्रेरी का [[अप्लिकेशन प्रोग्रामिंग अंतरफलक|एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस]] [[(एपीआई)]] कई शीर्षलेख फ़ाइलों में घोषित किया गया है। प्रत्येक शीर्ष लेख फ़ाइल में या अधिक फ़ंक्शन घोषणाएँ, डेटा प्रकार परिभाषाएँ और मैक्रोज़ होते हैं।


स्थिरता की लंबी अवधि के बाद, तीन नई शीर्षलेख फ़ाइलें (<code>iso646.h</code>, <code>wchar.h</code>, और <code>wctype.h</code>) नॉर्मेटिव ऐडेंडम 1 (NA1) के साथ जोड़े गए थे, जो 1995 में प्रमाणित C मानक के अतिरिक्त था। छह और हेडर फाइलें (<code>complex.h</code>, <code>fenv.h</code>, <code>inttypes.h</code>, <code>stdbool.h</code>, <code>stdint.h</code>, और <code>tgmath.h</code>) को [[C99]] के साथ जोड़ा गया, जो 1999 में प्रकाशित C मानक में संशोधन था, और पांच और फाइलें (<code>stdalign.h</code>, <code>stdatomic.h</code>, <code>stdnoreturn.h</code>, <code>threads.h</code>, और <code>uchar.h</code>) 2011 में C11 (C मानक संशोधन) के साथ। कुल मिलाकर, अब 29 हेडर फाइलें हैं:
स्थिरता की लंबी अवधि के पश्चात्, तीन नई शीर्षलेख फ़ाइलें (<code>iso646.h</code>, <code>wchar.h</code>, और <code>wctype.h</code>) नॉर्मेटिव ऐडेंडम 1 (NA1) के साथ जोड़े गए थे। जो         1995 में प्रमाणित सी मानक के अतिरिक्त थी। चूँकि छह और शीर्षलेख फाइलें (<code>complex.h</code>, <code>fenv.h</code>, <code>inttypes.h</code>, <code>stdbool.h</code>, <code>stdint.h</code>, और <code>tgmath.h</code>) को [[C99|सी99]] के साथ जोड़ा गया था। जो सन् 1999 में प्रकाशित सी मानक में संशोधन था, और पांच और फाइलें (<code>stdalign.h</code>, <code>stdatomic.h</code>, <code>stdnoreturn.h</code>, <code>threads.h</code>, और <code>uchar.h</code>) सन् 2011 में सी11 (सी मानक संशोधन) के साथ सम्मिलित थी। अतः कुल मिलाकर अब 29 शीर्षलेख फाइलें हैं।


{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
! Name !! From !! Description
! '''नाम'''!! से !! '''विवरण'''
|-
|-
| <code>[[assert.h|<assert.h>]]</code> || || Contains the [[assertion (computing)|assert]] macro, used to assist with detecting logical errors and other types of bugs in debugging versions of a program.
| <code>[[assert.h|<assert.h>]]</code> || || एक कार्यक्रम के डिबगिंग संस्करणों में तार्किक त्रुटियों और अन्य प्रकार की बगों का पता लगाने में [[सहायता]] के लिए उपयोग किए जाने वाले मुखर मैक्रो सम्मिलित हैं।
|-
|-
| <code>[[complex.h|<complex.h>]]</code> || C99 || A [[C mathematical functions#complex.h|set of functions]] for manipulating [[complex number]]s.
| <code>[[complex.h|<complex.h>]]</code> || सी99 || [[जटिल संख्याओं]] में हेरफेर करने के लिए [[कार्यों का समूह]]
|-
|-
| <code>[[ctype.h|<ctype.h>]]</code> || || Defines [[C character classification|set of functions]] used to classify characters by their types or to convert between upper and lower case in a way that is independent of the used [[character set]] (typically [[ASCII]] or one of its extensions, although implementations utilizing [[EBCDIC]] are also known).
| <code>[[ctype.h|<ctype.h>]]</code> || || वर्णों को उनके प्रकारों के आधार पर वर्गीकृत करने के लिए या ऊपरी और निचली स्थिति के मध्य परिवर्तित करने के लिए उपयोग किए जाने वाले [[कार्यों के समूह]] को परिभाषित करता है। जो प्रयुक्त [[वर्ण समूह]] से स्वतंत्र है। (सामान्यतः [[एएससीआईआई]] या इसके प्रारूप में से, चूँकि [[ईबीसीडीआईसी]] का उपयोग करने वाले कार्यान्वयन भी ज्ञात हैं)
|-
|-
| <code>[[errno.h|<errno.h>]]</code> || || For testing error codes reported by library functions.
| <code>[[errno.h|<errno.h>]]</code> || || लाइब्रेरी कार्यों द्वारा वर्णन किए गए त्रुटि कोड के परीक्षण के लिए।
|-
|-
| <code>[[fenv.h|<fenv.h>]]</code> || C99 || Defines a [[C mathematical functions#fenv.h|set of functions]] for controlling [[floating-point]] environment.
| <code>[[fenv.h|<fenv.h>]]</code> || सी99 || [[फ़्लोटिंग-पॉइंट]] वातावरण को नियंत्रित करने के लिए [[कार्यों के समूह]] को परिभाषित करता है।
|-
|-
| <code>[[float.h|<float.h>]]</code> || || Defines [[C data types#float.h|macro constants]] specifying the implementation-specific properties of the [[floating-point]] library.
| <code>[[float.h|<float.h>]]</code> || || [[फ़्लोटिंग-पॉइंट]] लाइब्रेरी के कार्यान्वयन-विशिष्ट गुणों को निर्दिष्ट करने वाले [[मैक्रो स्थिरांक]] को परिभाषित करता है।
|-
|-
| <code>[[inttypes.h|<inttypes.h>]]</code> || C99 || Defines [[C data types#inttypes.h|exact-width integer types]].
| <code>[[inttypes.h|<inttypes.h>]]</code> || सी99 || [[सटीक-चौड़ाई पूर्णांक प्रकारों]] को परिभाषित करता है।
|-
|-
| <code>[[iso646.h|<iso646.h>]]</code> || NA1 || Defines [[C alternative tokens|several macros]] that implement alternative ways to express several standard tokens. For programming in [[ISO 646]] variant character sets.
| <code>[[iso646.h|<iso646.h>]]</code> || एनए1 || यह अनेक [[मैक्रोज़]] को परिभाषित करता है। जो अनेक मानक टोकन व्यक्त करने के वैकल्पिक प्रकारों को प्रयुक्त करता है। [[आईएसओ 646]] सामान्यीकरण समूह में प्रोग्रामिंग के लिए।
|-
|-
| <code>[[limits.h|<limits.h>]]</code> || || Defines [[C data types#limits.h|macro constants]] specifying the implementation-specific properties of the integer types.
| <code>[[limits.h|<limits.h>]]</code> || || पूर्णांक प्रकारों के कार्यान्वयन-विशिष्ट गुणों को निर्दिष्ट करने वाले [[मैक्रो स्थिरांक]] को परिभाषित करता है।
|-
|-
| <code><locale.h></code> || || Defines [[C localization functions|localization functions]].
| <code><locale.h></code> || || [[स्थानीयकरण]] कार्यों को परिभाषित करता है।
|-
|-
| <code>[[math.h|<math.h>]]</code> || || Defines [[C mathematical functions|common mathematical functions]].
| <code>[[math.h|<math.h>]]</code> || || [[सामान्य गणितीय कार्यों]] को परिभाषित करता है।
|-
|-
| <code>[[setjmp.h|<setjmp.h>]]</code> || || Declares the macros <code>setjmp</code> and <code>longjmp</code>, which are used for non-local exits.
| <code>[[setjmp.h|<setjmp.h>]]</code> || || मैक्रोज़<code>setjmp</code> और <code>longjmp</code> की घोषणा करता है, जिनका उपयोग गैर-स्थानीय निकास के लिए किया जाता है।
|-
|-
| <code>[[signal.h|<signal.h>]]</code> || || Defines [[C signal handling|signal-handling functions]].
| <code>[[signal.h|<signal.h>]]</code> || || [[सिग्नल-हैंडलिंग कार्यों]] को परिभाषित करता है।
|-
|-
| <code><stdalign.h></code> || C11 || For querying and specifying the [[Data structure alignment|alignment]] of objects.
| <code><stdalign.h></code> || सी11 || वस्तुओं के [[संरेखण]] को क्वेरी करने और निर्दिष्ट करने के लिए।
|-
|-
| <code>[[stdarg.h|<stdarg.h>]]</code> || || For accessing a varying number of arguments passed to functions.
| <code>[[stdarg.h|<stdarg.h>]]</code> || || कार्यों में पारित तर्कों की एक अलग संख्या तक पहुँचने के लिए।
|-
|-
| <code><stdatomic.h></code> || C11 || For [[Linearizability|atomic operations]] on data shared between threads.
| <code><stdatomic.h></code> || सी11 || थ्रेड्स के मध्य साझा किए गए डेटा पर [[परमाणु संचालन]] के लिए।
|-
|-
| <code>[[stdbool.h|<stdbool.h>]]</code> || C99 || Defines [[C data types#stdbool.h|a boolean data type]].
| <code>[[stdbool.h|<stdbool.h>]]</code> || सी99 || [[बूलियन डेटा प्रकार]] को परिभाषित करता है।
|-
|-
| <code>[[stddef.h|<stddef.h>]]</code> || || Defines [[C data types#stddef.h|several useful types and macros]].
| <code>[[stddef.h|<stddef.h>]]</code> || || [[कई उपयोगी प्रकारों और मैक्रोज़]] को परिभाषित करता है।
|-
|-
| <code>[[stdint.h|<stdint.h>]]</code> || C99 || Defines [[C data types#stdint.h|exact-width integer types]].
| <code>[[stdint.h|<stdint.h>]]</code> || सी99 || [[सटीक-चौड़ाई पूर्णांक प्रकारों]] को परिभाषित करता है।
|-
|-
| <code>[[stdio.h|<stdio.h>]]</code> || || Defines [[C file input/output|core input and output functions]]
| <code>[[stdio.h|<stdio.h>]]</code> || || [[कोर इनपुट और आउटपुट कार्यों]] को परिभाषित करता है।
|-
|-
| <code><stdlib.h></code> || || Defines [[C string handling#stdlib.h|numeric conversion functions]], [[C mathematical functions#stdlib.h|pseudo-random numbers generation functions]], [[C dynamic memory allocation|memory allocation]], [[C process control|process control functions]]
| <code><stdlib.h></code> || || [[संख्यात्मक रूपांतरण कार्यों]], [[छद्म-यादृच्छिक संख्या पीढ़ी कार्यों]], [[स्मृति आवंटन, प्रक्रिया नियंत्रण कार्यों]] को परिभाषित करता है।
|-
|-
| <code><stdnoreturn.h></code> || C11 || For specifying non-returning functions
| <code><stdnoreturn.h></code> || सी11 || गैर-लौटने वाले कार्यों को निर्दिष्ट करने के लिए।
|-
|-
| <code>[[string.h|<string.h>]]</code> || || Defines [[C string handling|string-handling functions]]
| <code>[[string.h|<string.h>]]</code> || || [[स्ट्रिंग-हैंडलिंग फ़ंक्शन]] को परिभाषित करता है।
|-
|-
| <code>[[tgmath.h|<tgmath.h>]]</code> || C99 || Defines [[C mathematical functions#tgmath.h|type-generic mathematical functions]].
| <code>[[tgmath.h|<tgmath.h>]]</code> || सी99 || [[टाइप-जेनेरिक गणितीय कार्यों]] को परिभाषित करता है।
|-
|-
| <code><threads.h></code> || C11 || Defines functions for managing multiple [[Thread (computer science)|threads]], [[Mutual exclusion|mutexes]] and [[Monitor (synchronization)|condition variables]]
| <code><threads.h></code> || सी11 || [[एकाधिक धागे, म्यूटेक्स]] और [[हालत चर]] के प्रबंधन के लिए कार्यों को परिभाषित करता है।
|-
|-
| <code>[[time.h|&lt;time.h&gt;]]</code> || || Defines [[C date and time functions|date- and time-handling functions]]
| <code>[[time.h|&lt;time.h&gt;]]</code> || || [[दिनांक और समय प्रबंधन कार्यों]] को परिभाषित करता है।
|-
|-
| <code><uchar.h></code> || C11 || Types and functions for manipulating [[Unicode]] characters
| <code><uchar.h></code> || सी11 || [[यूनिकोड]] वर्णों में हेरफेर करने के लिए प्रकार और कार्य।
|-
|-
| <code>[[wchar.h|<wchar.h>]]</code> || NA1 || Defines [[C string handling|wide-string-handling functions]]
| <code>[[wchar.h|<wchar.h>]]</code> || एनए1 || [[वाइड-स्ट्रिंग-हैंडलिंग फ़ंक्शन]] को परिभाषित करता है।
|-
|-
| <code>[[wctype.h|<wctype.h>]]</code> || NA1 || Defines [[C character classification|set of functions]] used to classify wide characters by their types or to convert between upper and lower case
| <code>[[wctype.h|<wctype.h>]]</code> || एनए1 || विस्तृत वर्णों को उनके प्रकारों के आधार पर वर्गीकृत करने या ऊपरी और निचले स्थिति के मध्य परिवर्तित करने के लिए उपयोग किए जाने वाले [[कार्यों के सेट|कार्यों के समूह]] को परिभाषित करता है
|}
|}
शीर्षलेख फ़ाइलों में से तीन (<code>complex.h</code>, <code>stdatomic.h</code>, और <code>threads.h</code>) सशर्त विशेषताएं हैं जिनका समर्थन करने के लिए कार्यान्वयन की आवश्यकता नहीं है।
शीर्षलेख फ़ाइलों में से तीन (<code>complex.h</code>, <code>stdatomic.h</code>, और <code>threads.h</code>) सशर्त विशेषताएं हैं। जिनका समर्थन करने के लिए कार्यान्वयन की आवश्यकता नहीं है।


[[POSIX]] मानक ने यूनिक्स-विशिष्ट कार्यक्षमता के लिए कई गैर-मानक C हेडर जोड़े। कई ने अन्य आर्किटेक्चर के लिए अपना रास्ता खोज लिया है। उदाहरणों में शामिल <code>[[fcntl.h]]</code> और <code>[[unistd.h]]</code>. कई अन्य समूह अन्य गैर-मानक शीर्षलेखों का उपयोग कर रहे हैं - [[जीएनयू सी लाइब्रेरी]] में है <code>alloca.h</code>, और HP [[OpenVMS]] के पास है <code>va_count()</code> समारोह।
[[POSIX|पॉज़िक्स]] मानक ने यूनिक्स-विशिष्ट कार्यक्षमता के लिए कई गैर-मानक सी शीर्षलेख जोड़े जाते है। अतः अन्य आर्किटेक्चर के लिए अपना मार्ग खोज लिया है। उदाहरणों में सम्मिलित <code>[[fcntl.h]]</code> और <code>[[unistd.h]]</code>. अनेक अन्य समूह अन्य गैर-मानक शीर्षलेखों का उपयोग कर रहे हैं - [[जीएनयू सी लाइब्रेरी]] में <code>alloca.h</code>, है और HP [[OpenVMS]] में <code>va_count()</code> फ़ंक्शन है।।


=== दस्तावेज़ ===
=== दस्तावेज़ ===
यूनिक्स जैसी प्रणालियों पर, वास्तव में कार्यान्वित एपीआई का आधिकारिक दस्तावेज [[मैन पेज]] के रूप में प्रदान किया जाता है। अधिकांश प्रणालियों पर, मानक लाइब्रेरी कार्यों पर मैन पेज अनुभाग 3 में होते हैं; अनुभाग 7 में अंतर्निहित अवधारणाओं पर कुछ और सामान्य पृष्ठ हो सकते हैं (उदा. <code>man 7 math_error</code> [[लिनक्स]] में)।
यूनिक्स जैसी प्रणालियों पर, वास्तव में कार्यान्वित एपीआई का आधिकारिक दस्तावेज [[मैन पेज]] के रूप में प्रदान किया जाता है। अधिकांश प्रणालियों पर, मानक लाइब्रेरी कार्यों पर मैन पेज अनुभाग 3 में होते हैं; अनुभाग 7 में अंतर्निहित अवधारणाओं पर कुछ और सामान्य पृष्ठ हो सकते हैं। (उदाहरण के लिए <code>man 7 math_error</code> [[लिनक्स]] में)।


== कार्यान्वयन ==
== कार्यान्वयन ==
यूनिक्स जैसी प्रणालियों में आम तौर पर साझा लाइब्रेरी के रूप में एक सी लाइब्रेरी होती है, लेकिन हेडर फाइलें (और कंपाइलर टूलचैन) एक इंस्टॉलेशन से अनुपस्थित हो सकती हैं, इसलिए सी विकास संभव नहीं हो सकता है। सी लाइब्रेरी को यूनिक्स जैसी प्रणालियों पर ऑपरेटिंग सिस्टम का हिस्सा माना जाता है। आईएसओ सी मानक वाले सी कार्यों का व्यापक रूप से कार्यक्रमों द्वारा उपयोग किया जाता है, और माना जाता है कि वे न केवल सी भाषा में कुछ का कार्यान्वयन थे, बल्कि ऑपरेटिंग सिस्टम इंटरफ़ेस का वास्तविक हिस्सा भी थे। यदि सी लाइब्रेरी मिटा दी जाती है तो यूनिक्स-जैसी ऑपरेटिंग सिस्टम आम तौर पर काम नहीं कर सकते हैं। यह उन अनुप्रयोगों के लिए सही है जो स्थिर रूप से जुड़े होने के विपरीत गतिशील हैं। इसके अलावा, स्वयं कर्नेल (लिनक्स के मामले में कम से कम) किसी भी पुस्तकालय से स्वतंत्र रूप से संचालित होता है।
यूनिक्स जैसी प्रणालियों में सामान्यतः साझा लाइब्रेरी के रूप में सी लाइब्रेरी होती है, किन्तु शीर्षलेख फाइलें (और कंपाइलर टूलचैन) इंस्टॉलेशन से अनुपस्थित हो सकती हैं। इसलिए सी विकास संभव नहीं हो सकता है। सी लाइब्रेरी को यूनिक्स जैसी प्रणालियों पर ऑपरेटिंग सिस्टम का भाग माना जाता है। आईएसओ सी मानक वाले सी कार्यों का व्यापक रूप से कार्यक्रमों द्वारा उपयोग किया जाता है, और माना जाता है कि वह न केवल सी भाषा में कुछ का कार्यान्वयन थे। बल्कि ऑपरेटिंग सिस्टम इंटरफ़ेस का वास्तविक भाग भी थे। यदि सी लाइब्रेरी मिटा दी जाती है। तब यूनिक्स-जैसी ऑपरेटिंग सिस्टम सामान्यतः कार्य नहीं कर सकते हैं। यह उन अनुप्रयोगों के लिए सही है जो स्थिर रूप से जुड़े होने के विपरीत गतिशील हैं। इसके अतिरिक्त, स्वयं कर्नेल (लिनक्स के स्थितिमें कम से कम) किसी भी लाइब्रेरी से स्वतंत्र रूप से संचालित होता है।


Microsoft Windows पर, कोर सिस्टम डायनेमिक लाइब्रेरी ([[डायनेमिक-लिंक लाइब्रेरी]]) Microsoft Visual C++ कंपाइलर v6.0 के लिए C मानक लाइब्रेरी का कार्यान्वयन प्रदान करती है; Microsoft Visual C++ कंपाइलर के नए संस्करणों के लिए C मानक लाइब्रेरी प्रत्येक कंपाइलर द्वारा व्यक्तिगत रूप से, साथ ही पुनर्वितरण योग्य पैकेज द्वारा प्रदान की जाती है। C में लिखे गए संकलित अनुप्रयोग या तो स्थिर रूप से C लाइब्रेरी से जुड़े होते हैं, [[साझा पुस्तकालय]] के एक गतिशील संस्करण से जुड़े होते हैं, जो लक्षित सिस्टम पर मौजूद होने के बजाय इन अनुप्रयोगों के साथ भेजे जाते हैं। कंपाइलर की C लाइब्रेरी में फ़ंक्शंस को Microsoft Windows के इंटरफ़ेस के रूप में नहीं माना जाता है।
माइक्रोसॉफ़्ट विंडोज़ पर, कोर सिस्टम डायनेमिक लाइब्रेरी ([[डायनेमिक-लिंक लाइब्रेरी]]) माइक्रोसॉफ़्ट विसुअल सी++ कंपाइलर वी6.0 के लिए सी मानक लाइब्रेरी का कार्यान्वयन प्रदान करती है। माइक्रोसॉफ़्ट विसुअल सी++ कंपाइलर के नए संस्करणों के लिए सी मानक लाइब्रेरी प्रत्येक कंपाइलर द्वारा व्यक्तिगत रूप से साथ ही पुनर्वितरण योग्य पैकेज द्वारा प्रदान की जाती है। सी में लिखे गए संकलित अनुप्रयोग या तो स्थिर रूप से सी लाइब्रेरी से जुड़े होते हैं या [[साझा पुस्तकालय|साझा लाइब्रेरी]] के गतिशील संस्करण से जुड़े होते हैं। जो लक्षित सिस्टम पर उपस्तिथ होने के अतिरिक्त इन अनुप्रयोगों के साथ भेजे जाते हैं। कंपाइलर की सी लाइब्रेरी में फ़ंक्शंस को माइक्रोसॉफ़्ट विंडोज़ के इंटरफ़ेस के रूप में नहीं माना जाता है।


कई अन्य कार्यान्वयन मौजूद हैं, जो विभिन्न ऑपरेटिंग सिस्टम और सी कंपाइलर दोनों के साथ उपलब्ध हैं। कुछ लोकप्रिय कार्यान्वयन निम्नलिखित हैं:
कई अन्य कार्यान्वयन उपस्तिथ हैं, जो विभिन्न ऑपरेटिंग सिस्टम और सी कंपाइलर दोनों के साथ उपलब्ध हैं। कुछ लोकप्रिय कार्यान्वयन निम्नलिखित हैं।


* बीएसडी लिबक, [[बर्कले सॉफ्टवेयर वितरण]]-व्युत्पन्न ऑपरेटिंग सिस्टम के साथ वितरित विभिन्न कार्यान्वयन
* बीएसडी लिबक, [[बर्कले सॉफ्टवेयर वितरण]]-व्युत्पन्न ऑपरेटिंग सिस्टम के साथ वितरित विभिन्न कार्यान्वयन।
* GNU C लाइब्रेरी (glibc), GNU हर्ड, GNU/kFreeBSD और Linux में प्रयुक्त
* जीएनयू सी लाइब्रेरी (gलिबक), जीएनयू हर्ड, जीएनयू/केफ्रीबीएसडी और लिनक्स में प्रयुक्त।
* Windows लाइब्रेरी फ़ाइलें#CRT|Microsoft C रन-टाइम लाइब्रेरी, [[Microsoft Visual C++]] का हिस्सा
* विंडोज लाइब्रेरी फ़ाइलें सीआरटी माइक्रोसॉफ़्ट सी रन-टाइम लाइब्रेरी, [[Microsoft Visual C++|माइक्रोसॉफ़्ट Visual C++]] का भाग।
* [[diyas]], सी मानक पुस्तकालय का एक वैकल्पिक छोटा कार्यान्वयन (एमएमयू-कम)
* [[डायटलिबक]], सी मानक लाइब्रेरी का वैकल्पिक छोटा कार्यान्वयन (एमएमयू-कम)
* [[uClibc]]|μClibc, एम्बेडेड μClinux सिस्टम के लिए एक C मानक पुस्तकालय (MMU-कम)
* [[uClibc|uCलिबक]], एम्बेडेड μCलिनक्स सिस्टम के लिए सी मानक लाइब्रेरी (एमएमयू-कम)
** uClibc|uclibc-ng, एक एम्बेडेड C लाइब्रेरी, μClibc का फोर्क, [[स्मृति प्रबंधन इकाई]] (MMU) समर्थन के साथ अभी भी अनुरक्षित है
* [[न्यूलिब]], एम्बेडेड सिस्टम के लिए एक सी मानक पुस्तकालय (एमएमयू-कम)<ref>{{cite web |url=http://www.cygwin.com/ml/newlib/2006/msg00224.html |title=Re: Does Newlib support mmu-less CPUs? |publisher=Cygwin.com |date=23 March 2006 |access-date=28 October 2011 |archive-url=https://web.archive.org/web/20081122063741/http://www.cygwin.com/ml/newlib/2006/msg00224.html |archive-date=22 November 2008 |url-status=dead }}</ref> और Windows के लिए [[Cygwin]] GNU वितरण में उपयोग किया जाता है
* [[klibc]], मुख्य रूप से Linux सिस्टम को बूट करने के लिए
* [[musl]], लिनक्स सिस्टम के लिए एक और हल्का सी मानक पुस्तकालय कार्यान्वयन<ref>{{cite web|url=http://www.etalabs.net/musl/ |title=musl libc |publisher=Etalabs.net |access-date=28 October 2011}}</ref>
* [[बायोनिक (सॉफ्टवेयर)]], मूल रूप से Google द्वारा Android एम्बेडेड सिस्टम ऑपरेटिंग सिस्टम के लिए विकसित किया गया है, जो BSD libc से प्राप्त हुआ है
* [https://keithp.com/picolibc picolibc], [[कीथ पैकर्ड]] द्वारा विकसित, न्यूलिब और [https://www.nongnu.org/avr-libc/ AVR Libc के कोड के आधार पर सीमित रैम के साथ छोटे एम्बेडेड सिस्टम को लक्षित करता है। ]


=== कंपाइलर बिल्ट-इन फ़ंक्शंस ===
* ucलिबक-ng, एम्बेडेड सी लाइब्रेरी, μCलिबक का फोर्क, [[स्मृति प्रबंधन इकाई]] (एमएमयू) समर्थन के साथ अभी भी अनुरक्षित है।
कुछ संकलक (उदाहरण के लिए, GNU संकलक संग्रह<ref>[https://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Other-Builtins.html#Other-Builtins Other built-in functions provided by GCC], GCC Manual</ref>) सी मानक पुस्तकालय में कई कार्यों के अंतर्निर्मित संस्करण प्रदान करें; अर्थात्, कार्यों के कार्यान्वयन को संकलित [[वस्तु फ़ाइल]] में लिखा गया है, और प्रोग्राम सी लाइब्रेरी साझा ऑब्जेक्ट फ़ाइल में फ़ंक्शंस के बजाय अंतर्निहित संस्करणों को कॉल करता है। यह फ़ंक्शन-कॉल ओवरहेड को कम करता है, खासकर यदि फ़ंक्शन कॉल को [[इनलाइन फ़ंक्शन]] वेरिएंट के साथ बदल दिया जाता है, और [[संकलक अनुकूलन]] के अन्य रूपों की अनुमति देता है (जैसा कि कंपाइलर [[बहाव को काबू करें]] जानता है। बिल्ट-इन वेरिएंट की कंट्रोल-फ्लो विशेषताओं), लेकिन भ्रम पैदा कर सकता है जब डिबगिंग (उदाहरण के लिए, अंतर्निहित संस्करणों को [[इंस्ट्रूमेंटेशन (कंप्यूटर प्रोग्रामिंग)]] वेरिएंट से बदला नहीं जा सकता)।
* [[न्यूलिब]], एम्बेडेड सिस्टम के लिए सी मानक लाइब्रेरी (एमएमयू-कम)<ref>{{cite web |url=http://www.cygwin.com/ml/newlib/2006/msg00224.html |title=Re: Does Newlib support mmu-less CPUs? |publisher=Cygwin.com |date=23 March 2006 |access-date=28 October 2011 |archive-url=https://web.archive.org/web/20081122063741/http://www.cygwin.com/ml/newlib/2006/msg00224.html |archive-date=22 November 2008 |url-status=dead }}</ref> और विंडोज के लिए [[Cygwin]] जीएनयू वितरण में उपयोग किया जाता है।


हालांकि, अंतर्निहित कार्यों को आईएसओ सी के अनुसार सामान्य कार्यों की तरह व्यवहार करना चाहिए। मुख्य निहितार्थ यह है कि प्रोग्राम को इन कार्यों के लिए उनका पता लेकर एक सूचक बनाने में सक्षम होना चाहिए, और उस सूचक के माध्यम से कार्य को लागू करना चाहिए। यदि प्रोग्राम में दो अलग-अलग अनुवाद इकाइयों में एक ही फ़ंक्शन के दो पॉइंटर्स व्युत्पन्न होते हैं, तो इन दो पॉइंटर्स को बराबर तुलना करनी चाहिए; अर्थात्, पता फ़ंक्शन के नाम को हल करके आता है, जिसमें बाहरी (प्रोग्राम-वाइड) लिंकेज है।
* [[klibc|kलिबक]], मुख्य रूप से लिनक्स सिस्टम को बूट करने के लिए।
* [[musl]], लिनक्स सिस्टम के लिए और हल्का सी मानक लाइब्रेरी कार्यान्वयन।<ref>{{cite web|url=http://www.etalabs.net/musl/ |title=musl libc |publisher=Etalabs.net |access-date=28 October 2011}}</ref>
* [[बायोनिक (सॉफ्टवेयर)]], मूल रूप से गूगल द्वारा एंड्रॉयड एम्बेडेड सिस्टम ऑपरेटिंग सिस्टम के लिए विकसित किया गया है, जो बीएसडी लिबक से प्राप्त हुआ है।
* [https://keithp.com/picolibc picoलिबक], [[कीथ पैकर्ड]] द्वारा विकसित, न्यूलिब और [[एवीआर]] [https://www.nongnu.org/avr-libc/ लिबक के कोड के आधार पर सीमित रैम के साथ छोटे एम्बेडेड सिस्टम को लक्षित करता है।]


=== लिंकिंग, libm ===
=== कंपाइलर अंतर्निहित कार्य ===
कुछ संकलक (उदाहरण के लिए, जीएनयू संकलक संग्रह<ref>[https://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Other-Builtins.html#Other-Builtins Other built-in functions provided by GCC], GCC Manual</ref>) सी मानक लाइब्रेरी में कई कार्यों के अंतर्निर्मित संस्करण प्रदान करते है। अर्थात्, कार्यों के कार्यान्वयन को संकलित [[वस्तु फ़ाइल]] में लिखा गया है, और प्रोग्राम सी लाइब्रेरी साझा ऑब्जेक्ट फ़ाइल में फ़ंक्शंस के अतिरिक्त अंतर्निहित संस्करणों को कॉल करता है। यह फ़ंक्शन-कॉल ओवरहेड को कम करता है। विशेष रूप से यदि फ़ंक्शन कॉल को [[इनलाइन फ़ंक्शन]] वेरिएंट के साथ परिवर्तित कर दिया जाता है, और [[संकलक अनुकूलन]] के अन्य रूपों की अनुमति देता है (जैसा कि कंपाइलर [[बहाव को काबू करें|बहाव को नियंत्रित]] करना जानता है। बिल्ट-इन वेरिएंट की कंट्रोल-फ्लो विशेषताओं), किन्तु काल्पनिक धारणा उत्पन्न कर सकता है। जब डिबगिंग (उदाहरण के लिए, अंतर्निहित संस्करणों को [[इंस्ट्रूमेंटेशन (कंप्यूटर प्रोग्रामिंग)]] वेरिएंट से परिवर्तित नहीं किया जा सकता है)।


फ्रीबीएसडी के तहत<ref>{{cite web|title=Compiling with cc|url=http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/tools-compiling.html|access-date=2013-03-02}}</ref> और ग्लिबैक,<ref>{{cite web |last1=Weimer |first1=Florian |title=c - What functions is the libm intended for? |url=https://stackoverflow.com/questions/54054925/what-functions-is-the-libm-intended-for |website=Stack Overflow |access-date=24 February 2021}}</ref> कुछ फ़ंक्शन जैसे पाप () डिफ़ॉल्ट रूप से लिंक नहीं होते हैं और इसके बजाय गणितीय पुस्तकालय [[libm]] में बंडल किए जाते हैं। यदि उनमें से किसी का उपयोग किया जाता है, तो लिंकर को निर्देश दिया जाना चाहिए <code>-lm</code>. POSIX के लिए आवश्यक है कि c99 कंपाइलर समर्थन करे <code>-lm</code>, और यह कि हेडर में घोषित किए गए कार्य <code>math.h</code>, <code>complex.h</code>, और <code>fenv.h</code> लिंक करने के लिए उपलब्ध हैं अगर <code>-lm</code> निर्दिष्ट है, लेकिन यह निर्दिष्ट नहीं करता है कि फ़ंक्शन डिफ़ॉल्ट रूप से लिंक किए गए हैं या नहीं।<ref>{{cite web |title=c99 - compile standard C programs |url=https://pubs.opengroup.org/onlinepubs/9699919799/utilities/c99.html |website=The Open Group Base Specifications Issue 7, 2018 edition |publisher=The Open Group |access-date=24 February 2021}}</ref> musl सब कुछ एक ही libc लाइब्रेरी में डालकर और एक खाली libm प्रदान करके इस आवश्यकता को पूरा करता है।<ref>{{cite web |title=musl FAQ |url=https://www.musl-libc.org/faq.html |website=www.musl-libc.org |access-date=24 February 2021}}</ref>
चूंकि, अंतर्निहित कार्यों को आईएसओ सी के अनुसार सामान्य कार्यों की प्रकार व्यवहार करना चाहिए। मुख्य निहितार्थ यह है कि प्रोग्राम को इन कार्यों के लिए उनका पता लेकर सूचक बनाने में सक्षम होना चाहिए, और उस सूचक के माध्यम से कार्य को प्रयुक्त करना चाहिए। यदि प्रोग्राम में दो भिन्न-भिन्न अनुवाद इकाइयों में ही फ़ंक्शन के दो पॉइंटर्स व्युत्पन्न होते हैं, तो इन दो पॉइंटर्स को समान्तर तुलना करनी चाहिए; अर्थात्, पता फ़ंक्शन के नाम को हल करके आता है, जिसमें बाहरी (प्रोग्राम-वाइड) लिंकेज है।


=== लिंकिंग, libm ===


=== पता लगाना ===
फ्रीबीएसडी के अनुसार <ref>{{cite web|title=Compiling with cc|url=http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/tools-compiling.html|access-date=2013-03-02}}</ref> और ग्लिबैक,<ref>{{cite web |last1=Weimer |first1=Florian |title=c - What functions is the libm intended for? |url=https://stackoverflow.com/questions/54054925/what-functions-is-the-libm-intended-for |website=Stack Overflow |access-date=24 February 2021}}</ref> कुछ फ़ंक्शन जैसे sin() डिफ़ॉल्ट रूप से लिंक नहीं होते हैं और इसके अतिरिक्त गणितीय लाइब्रेरी [[libm]] में बंडल किए जाते हैं। यदि उनमें से किसी का उपयोग किया जाता है, तो लिंकर को निर्देश दिया जाना चाहिए <code>-lm</code>. पॉज़िक्स के लिए आवश्यक है कि सी99 कंपाइलर समर्थन करता है <code>-lm</code>, और यह कि शीर्षलेख में घोषित किए गए कार्य <code>math.h</code>, <code>complex.h</code>, और <code>fenv.h</code> लिंक करने के लिए उपलब्ध हैं यदि <code>-lm</code> निर्दिष्ट है, किन्तु यह निर्दिष्ट नहीं करता है कि फ़ंक्शन डिफ़ॉल्ट रूप से लिंक किए गए हैं या नहीं।<ref>{{cite web |title=c99 - compile standard C programs |url=https://pubs.opengroup.org/onlinepubs/9699919799/utilities/c99.html |website=The Open Group Base Specifications Issue 7, 2018 edition |publisher=The Open Group |access-date=24 February 2021}}</ref> musl सब कुछ ही लिबक लाइब्रेरी में डालकर और खाली libm प्रदान करके इस आवश्यकता को पूर्ण करता है।<ref>{{cite web |title=musl FAQ |url=https://www.musl-libc.org/faq.html |website=www.musl-libc.org |access-date=24 February 2021}}</ref>
सी मानक के अनुसार मैक्रो <code>__STDC_HOSTED__</code> कार्यान्वयन की मेजबानी होने पर 1 को परिभाषित किया जाएगा। एक होस्टेड कार्यान्वयन में सी मानक द्वारा निर्दिष्ट सभी शीर्षलेख हैं। कार्यान्वयन ''फ्रीस्टैंडिंग'' भी हो सकता है, जिसका अर्थ है कि ये हेडर मौजूद नहीं होंगे। यदि कार्यान्वयन 'फ्रीस्टैंडिंग' है, तो यह परिभाषित करेगा <code>__STDC_HOSTED__</code> से 0.
=== खोज ===
सी मानक के अनुसार मैक्रो <code>__STDC_HOSTED__</code> कार्यान्वयन की मेजबानी होने पर 1 को परिभाषित किया जाता है। होस्टेड कार्यान्वयन में सी मानक द्वारा निर्दिष्ट सभी शीर्षलेख हैं। कार्यान्वयन फ्रीस्टैंडिंग भी हो सकता है, जिसका अर्थ है कि ये शीर्षलेख उपस्तिथ नहीं होते है। यदि कार्यान्वयन 'फ्रीस्टैंडिंग' है, तब यह <code>__STDC_HOSTED__</code> से 0 परिभाषित करता है।


== समस्याएं और समाधान ==
== समस्याएं और समाधान ==


=== {{Anchor|BUFFER-OVERFLOW}}[[बफ़र अधिकता]] भेद्यता ===
=== [[बफ़र अधिकता]] भेद्यता ===
सी मानक पुस्तकालय में कुछ कार्य बफर अतिप्रवाह कमजोरियों के लिए कुख्यात रहे हैं और आम तौर पर बग्गी प्रोग्रामिंग को उनके गोद लेने के बाद से प्रोत्साहित करते हैं।{{efn|[[Morris worm]] that takes advantage of the well-known vulnerability in <code>gets()</code> have been created as early as in 1988.}} सबसे अधिक आलोचना वाली वस्तुएँ हैं:
सी मानक लाइब्रेरी में कुछ कार्य बफर अतिप्रवाह कमजोरियों के लिए कुख्यात रहे हैं और सामान्यतः बग्गी प्रोग्रामिंग को उनके गोद लेने के पश्चात् से प्रोत्साहित करते हैं।{{efn|[[Morris worm]] that takes advantage of the well-known vulnerability in <code>gets()</code> have been created as early as in 1988.}} अतः यह सबसे अधिक आलोचना वाली वस्तुएँ हैं।
* [[सी स्ट्रिंग हैंडलिंग]] | स्ट्रिंग-मैनिपुलेशन रूटीन, सहित <code>strcpy()</code> और <code>strcat()</code>, [[सीमा जाँच]] की कमी और संभावित बफर ओवरफ़्लो के लिए यदि सीमाएँ मैन्युअल रूप से जाँची नहीं जाती हैं;
 
* [[साइड इफेक्ट (कंप्यूटर विज्ञान)]] के लिए सामान्य रूप से स्ट्रिंग रूटीन | साइड-इफेक्ट्स, गैर-जिम्मेदार बफर उपयोग को प्रोत्साहित करना, हमेशा वैध [[अशक्त-समाप्त स्ट्रिंग]] की गारंटी नहीं देना।{{efn|in C standard library, string length calculation and looking for a string's end have [[Linear time|linear time complexities]] and are inefficient when used on the same or related strings repeatedly}}
* [[स्ट्रिंग-मैनिपुलेशन रूटीन]], सहित <code>strcpy()</code> और <code>strcat()</code>, [[सीमा जाँच]] की कमी और संभावित बफर ओवरफ़्लो के लिए यदि सीमाएँ मैन्युअल रूप से जाँची नहीं जाती हैं।
* <code>[[printf]]()</code> रूटीन का परिवार, [[कॉल स्टैक]] को खराब करने के लिए जब प्रारूप स्ट्रिंग दिए गए तर्कों से मेल नहीं खाती। इस मौलिक दोष ने हमलों की एक पूरी श्रेणी बनाई: प्रारूप स्ट्रिंग हमले;
* [[साइड इफेक्ट (कंप्यूटर विज्ञान)]] के लिए सामान्य रूप से स्ट्रिंग रूटीन साइड-इफेक्ट्स के लिए, गैर-जिम्मेदार बफर उपयोग को प्रोत्साहित करना, हमेशा वैध [[अशक्त-समाप्त स्ट्रिंग]] की गारंटी नहीं देता है।{{efn|in C standard library, string length calculation and looking for a string's end have [[Linear time|linear time complexities]] and are inefficient when used on the same or related strings repeatedly}}
* <code>[[gets()|gets]]()</code> और <code>[[scanf]]()</code> I/O रूटीन का परिवार, (या तो कोई या आसान) इनपुट लंबाई जाँच की कमी के लिए।
* <code>[[printf]]()</code> रूटीन का समूह, [[कॉल स्टैक]] को खराब करने के लिए जब प्रारूप स्ट्रिंग दिए गए तर्कों से मेल नहीं खाती है। इस मौलिक दोष ने हमलों की पूरी श्रेणी बनाई, प्रारूप स्ट्रिंग हमले।
* <code>[[gets()|gets]]()</code> और <code>[[scanf]]()</code> I/O रूटीन का समूह, (या तो कोई या आसान) इनपुट लंबाई जाँच की कमी के लिए होता है।


के साथ चरम मामले को छोड़कर <code>gets()</code>मेमोरी मैनेजमेंट, बाउंड चेकिंग, इनपुट चेकिंग आदि करने के लिए सहायक कोड शुरू करके सभी सुरक्षा कमजोरियों से बचा जा सकता है। यह अक्सर रैपर के रूप में किया जाता है जो मानक लाइब्रेरी फ़ंक्शंस को सुरक्षित और उपयोग में आसान बनाता है। यह बी. कर्निघन और आर. पाइक की [[प्रोग्रामिंग का अभ्यास]] पुस्तक के समय से पहले का है, जहां लेखक आमतौर पर रैपर का उपयोग करते हैं जो त्रुटि संदेशों को प्रिंट करते हैं और यदि कोई त्रुटि होती है तो प्रोग्राम को छोड़ देते हैं।
<code>gets()</code>के साथ चरम स्थितिको छोड़कर  स्मृति प्रबंधन, सीमा जाँच, इनपुट जाँच आदि करने के लिए सहायक कोड प्रारंभ करके सभी सुरक्षा कमजोरियों से बचा जा सकता है। यह अधिकांशतः रैपर के रूप में किया जाता है जो मानक लाइब्रेरी फ़ंक्शंस को सुरक्षित और उपयोग में आसान बनाता है। यह बी. कर्निघन और आर. पाइक की [[प्रोग्रामिंग का अभ्यास]] पुस्तक के समय से पूर्व का है, जहां लेखक सामान्यतः रैपर का उपयोग करते हैं जो त्रुटि संदेशों को प्रिंट करते हैं और यदि कोई त्रुटि होती है तो प्रोग्राम को छोड़ देते हैं।


आईएसओ सी समिति ने तकनीकी रिपोर्ट टीआर 24731-1 प्रकाशित की<ref>{{cite web
आईएसओ सी समिति ने तकनीकी रिपोर्ट टीआर 24731-1 प्रकाशित की गयी थी।<ref>{{cite web
  | url = http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1225.pdf
  | url = http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1225.pdf
  | title = ISO/IEC TR 24731-1: Extensions to the C Library, Part I: Bounds-checking interfaces
  | title = ISO/IEC TR 24731-1: Extensions to the C Library, Part I: Bounds-checking interfaces
  | date = 2007-03-28 | access-date = 2014-03-13
  | date = 2007-03-28 | access-date = 2014-03-13
  | publisher = open-std.org }}</ref> और टीआर 24731-2 पर काम कर रहा है<ref>{{cite web
  | publisher = open-std.org }}</ref> और टीआर 24731-2 पर कार्य कर रहा है।<ref>{{cite web
  | url = http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1337.pdf
  | url = http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1337.pdf
  | title = ISO/IEC WDTR 24731-2: Extensions to the C Library, Part II: Dynamic Allocation Functions
  | title = ISO/IEC WDTR 24731-2: Extensions to the C Library, Part II: Dynamic Allocation Functions
  | date = 2008-08-10 | access-date = 2014-03-13
  | date = 2008-08-10 | access-date = 2014-03-13
  | publisher = open-std.org }}</ref> सीमा जाँच और स्वत: बफर आवंटन के साथ कुछ कार्यों को अपनाने का प्रस्ताव करना। पूर्व को कुछ प्रशंसा के साथ कड़ी आलोचना का सामना करना पड़ा,<ref>[https://stackoverflow.com/questions/372980/do-you-use-the-tr-24731-safe-functions-in-your-c-code Do you use the TR 24731 'safe' functions in your C code?] - Stack overflow</ref><ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1106.txt |title=Austin Group Review of ISO/IEC WDTR 24731 |access-date=28 October 2011}}</ref> बाद वाले को मिश्रित प्रतिक्रियाएँ मिलीं। इसके बावजूद, टीआर 24731-1 को माइक्रोसॉफ्ट के सी मानक पुस्तकालय में लागू किया गया है और इसके संकलक पुराने असुरक्षित कार्यों का उपयोग करते समय चेतावनियां जारी करते हैं।
  | publisher = open-std.org }}</ref> सीमा जाँच और स्वत: बफर आवंटन के साथ कुछ कार्यों को अपनाने का प्रस्ताव करता है। पूर्व को कुछ प्रशंसा के साथ कड़ी आलोचना का सामना करना पड़ता है,<ref>[https://stackoverflow.com/questions/372980/do-you-use-the-tr-24731-safe-functions-in-your-c-code Do you use the TR 24731 'safe' functions in your C code?] - Stack overflow</ref><ref>{{cite web|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1106.txt |title=Austin Group Review of ISO/IEC WDTR 24731 |access-date=28 October 2011}}</ref>और बाद वाले को मिश्रित प्रतिक्रियाएँ मिलती है। इसके अतिरिक्त, टीआर 24731-1 को माइक्रोसॉफ्ट के सी मानक लाइब्रेरी में प्रयुक्त किया गया है और इसके संकलक पुराने असुरक्षित कार्यों का उपयोग करते समय चेतावनियां जारी करते हैं।
 
'''थ्रेडिंग समस्याएं, दौड़ की स्थिति के लिए भेद्यता'''


=== थ्रेडिंग की समस्याएं, दौड़ की स्थितियों के लिए भेद्यता === <code>[[strerror]]()</code> ई> रूटीन की थ्रेड सुरक्षा और अन्यथा दौड़ स्थितियों के प्रति संवेदनशील होने के लिए आलोचना की जाती है।
<code>strerror()</code> रूटीन की थ्रेड असुरक्षित होने और अन्यथा दौड़ की स्थिति के प्रति संवेदनशील होने के लिए आलोचना की जाती है।


=== त्रुटि प्रबंधन ===
=== त्रुटि प्रबंधन ===
सी मानक पुस्तकालय में कार्यों की त्रुटि प्रबंधन संगत नहीं है और कभी-कभी भ्रमित होती है। लिनक्स मैनुअल पेज के मुताबिक <code>math_error</code>, ग्लिबैक के तहत वर्तमान (संस्करण 2.8) स्थिति गड़बड़ है। अधिकांश (लेकिन सभी नहीं) फ़ंक्शन त्रुटियों पर अपवाद उठाते हैं। कुछ ने इरनो भी सेट किया। कुछ फ़ंक्शन इरनो सेट करते हैं, लेकिन अपवाद नहीं बढ़ाते हैं। बहुत कम कार्य न तो करते हैं।<ref>{{cite web
सी मानक लाइब्रेरी में कार्यों की त्रुटि प्रबंधन संगत नहीं है और कभी-कभी भ्रमित होती है। लिनक्स मैनुअल पेज <code>math_error</code>, के अनुसार, "ग्लिबैक के तहत वर्तमान (संस्करण 2.8) स्थिति गड़बड़ है। अधिकांश (लेकिन सभी नहीं) फ़ंक्शन त्रुटियों पर अपवाद उठाते हैं। कुछ इरनो भी समूह करते हैं। कुछ फ़ंक्शन इरनो समूह करते हैं, लेकिन कोई वृद्धि नहीं करते हैं अपवाद। बहुत कम कार्य न तो करते हैं।"<ref>{{cite web
  | url = http://man7.org/linux/man-pages/man7/math_error.7.html
  | url = http://man7.org/linux/man-pages/man7/math_error.7.html
  | title = math_error - detecting errors from mathematical functions
  | title = math_error - detecting errors from mathematical functions
  | date = 2008-08-11 | access-date = 2014-03-13
  | date = 2008-08-11 | access-date = 2014-03-13
  | website = man7.org
  | website = man7.org
}}</ref>
}}</ref>  
 
 
== मानकीकरण ==
== मानकीकरण ==
{{Main article|C (programming language)#History|l1=C (programming language) § History}}
{{Main article|सी (प्रोग्रामिंग भाषा) इतिहास|l1=सी (प्रोग्रामिंग भाषा) इतिहास}}
[[COBOL]] और [[फोरट्रान]] जैसी पारंपरिक भाषाओं के विपरीत, मूल C (प्रोग्रामिंग भाषा) ने I/O संचालन जैसे कोई अंतर्निहित कार्य प्रदान नहीं किए।{{Citation needed|date=November 2010}} समय के साथ, सी के उपयोगकर्ता समुदायों ने विचारों और कार्यान्वयन को साझा किया जिसे अब सी मानक पुस्तकालय कहा जाता है। इनमें से कई विचारों को अंततः मानकीकृत सी भाषा की परिभाषा में शामिल किया गया।
[[COBOL|कोबोल]] और [[फोरट्रान]] जैसी पारंपरिक भाषाओं के विपरीत, मूल सी (प्रोग्रामिंग भाषा) ने I/O संचालन जैसे कोई अंतर्निहित कार्य प्रदान नहीं किए है। चूँकि समय के साथ, सी के उपयोगकर्ता समुदायों ने विचारों और कार्यान्वयन को साझा किया जिसे अब सी मानक लाइब्रेरी कहा जाता है। इनमें से कई विचारों को अंततः मानकीकृत सी भाषा की परिभाषा में सम्मिलित किया गया है।


[[यूनिक्स]] और सी दोनों को 1960 के दशक के अंत और 1970 के दशक के प्रारंभ में बेल लैब्स | एटी एंड टी की बेल प्रयोगशालाओं में बनाया गया था। 1970 के दशक के दौरान सी भाषा तेजी से लोकप्रिय हुई। कई विश्वविद्यालयों और संगठनों ने अपनी स्वयं की परियोजनाओं के लिए भाषा के अपने संस्करण बनाने शुरू कर दिए। 1980 के दशक की शुरुआत तक विभिन्न सी कार्यान्वयनों के बीच संगतता समस्याएं स्पष्ट हो गईं। 1983 में अमेरिकी राष्ट्रीय मानक संस्थान (एएनएसआई) ने एएनएसआई सी नामक सी के मानक विनिर्देश स्थापित करने के लिए एक समिति का गठन किया। यह कार्य 1989 में तथाकथित C89 मानक के निर्माण में समाप्त हुआ। परिणामी मानक का एक हिस्सा [[सॉफ्टवेयर पुस्तकालय]]ों का एक सेट था जिसे ANSI C मानक पुस्तकालय कहा जाता है।
[[यूनिक्स]] और सी दोनों को सन् 1960 के दशक के अंत और सन् 1970 के दशक के प्रारंभ में बेल लैब्स एटी एंड टी की बेल प्रयोगशालाओं में बनाया गया था। सन् 1970 के दशक के समय सी भाषा तेजी से लोकप्रिय हुई थी। कई विश्वविद्यालयों और संगठनों ने अपनी स्वयं की परियोजनाओं के लिए भाषा के अपने संस्करण बनाने में प्रारंभ कर दिए थे। सन् 1980 के दशक की शुरुआत तक विभिन्न सी कार्यान्वयनों के मध्य संगतता समस्याएं स्पष्ट हो गईं थी। सन् 1983 में अमेरिकी राष्ट्रीय मानक संस्थान (एएनएसआई) ने एएनएसआई सी नामक सी के मानक विनिर्देश स्थापित करने के लिए समिति का गठन किया था। यह कार्य सन् 1989 में तथाकथित सी89 मानक के निर्माण में समाप्त हुआ था। अतः परिणामी मानक का भाग [[सॉफ्टवेयर पुस्तकालय|सॉफ्टवेयर लाइब्रेरी]] का समूह था। जिसे एएनएसआई सी मानक लाइब्रेरी कहा जाता है।


=== POSIX मानक पुस्तकालय ===
=== पॉज़िक्स मानक लाइब्रेरी ===
{{Main article|C POSIX library}}
{{Main article|सी पॉज़िक्स पुस्तकालय}}
POSIX, साथ ही [[एकल यूनिक्स विशिष्टता]], कई रूटीनों को निर्दिष्ट करती है जो मूल C मानक लाइब्रेरी में उपलब्ध होने चाहिए। POSIX विनिर्देशन में अन्य उपयोगों के साथ-साथ POSIX थ्रेड्स|मल्टी-थ्रेडिंग, [[बर्कले सॉकेट]]्स और [[नियमित अभिव्यक्ति]] के लिए हेडर फाइलें शामिल हैं। इन्हें अक्सर सी मानक लाइब्रेरी कार्यक्षमता के साथ निकटता की अलग-अलग डिग्री के साथ कार्यान्वित किया जाता है। उदाहरण के लिए, ग्लिबैक जैसे कार्यों को लागू करता है <code>[[fork (operating system)|fork]]</code> अंदर <code>libc.so</code>, लेकिन [[एनपीटीएल]] को ग्लिबैक में मिलाने से पहले इसने अपने स्वयं के लिंकर फ़्लैग तर्क के साथ एक अलग पुस्तकालय का गठन किया। अक्सर, इस POSIX-निर्दिष्ट कार्यक्षमता को लाइब्रेरी के भाग के रूप में माना जाएगा; मूल सी पुस्तकालय को एएनएसआई या मानकीकरण सी पुस्तकालय के लिए अंतर्राष्ट्रीय संगठन के रूप में पहचाना जा सकता है।


=== [[बीएसडी]] libc ===
पॉज़िक्स, साथ ही [[एकल यूनिक्स विशिष्टता]], कई रूटीनों को निर्दिष्ट करती है। जो मूल सी मानक लाइब्रेरी में उपलब्ध होने चाहिए। पॉज़िक्स विनिर्देशन में अन्य उपयोगों के साथ-साथ पॉज़िक्स थ्रेड्स मल्टी-थ्रेडिंग, [[बर्कले सॉकेट]] और [[नियमित अभिव्यक्ति]] के लिए शीर्षलेख फाइलें सम्मिलित हैं। इन्हें अधिकांशतः सी मानक लाइब्रेरी कार्यक्षमता के साथ निकटता की अलग-अलग डिग्री के साथ कार्यान्वित किया जाता है। उदाहरण के लिए, ग्लिबैक जैसे <code>[[fork (operating system)|fork]]</code> अंदर <code>लिबक.so</code> कार्यों को प्रयुक्त करता है। किन्तु [[एनपीटीएल]] को ग्लिबैक में मिलाने से पूर्व इसने अपने स्वयं के लिंकर फ़्लैग तर्क के साथ भिन्न लाइब्रेरी का गठन किया है। अधिकांशतः, इस पॉज़िक्स-निर्दिष्ट कार्यक्षमता को लाइब्रेरी के भाग के रूप में माना जाता है। मूल सी लाइब्रेरी को एएनएसआई या मानकीकरण सी लाइब्रेरी के लिए अंतर्राष्ट्रीय संगठन के रूप में पहचाना जा सकता है।
BSD libc POSIX मानक पुस्तकालय का एक सुपरसेट है, जो BSD ऑपरेटिंग सिस्टम जैसे [[FreeBSD]], [[NetBSD]], [[OpenBSD]] और [[macOS]] के साथ शामिल C पुस्तकालयों द्वारा समर्थित है। बीएसडी लिबक में कुछ एक्सटेंशन हैं जो मूल मानक में परिभाषित नहीं हैं, जिनमें से कई पहली बार 1994 के बीएसडी#4.4बीएसडी और डिसेंडेंट्स|4.4बीएसडी रिलीज में दिखाई दिए (1989 में जारी किए गए पहले मानक के बाद बड़े पैमाने पर विकसित किए गए पहले)। BSD libc के कुछ विस्तार हैं:


* <code>sys/tree.h</code>{{snd}} लाल-काले ट्री और [[पेड़ का पेड़]] का कार्यान्‍वयन शामिल है<ref>{{cite web|url=http://man.freebsd.org/tree|title=tree |website=Man.freebsd.org |date=2007-12-27 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/sys/sys/tree.h|title=Super User's BSD Cross Reference: /OpenBSD/sys/sys/tree.h|website=bxr.su}}</ref>
=== [[बीएसडी]] लिबक ===
* <code>sys/queue.h</code>{{snd}} [[लिंक्ड सूची]], [[कतार (डेटा संरचना)]], पूंछ कतार, आदि का कार्यान्वयन।<ref>{{cite web|url=http://man.freebsd.org/queue |title=queue |website=Man.freebsd.org |date=2011-05-13 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/sys/sys/queue.h|title=Super User's BSD Cross Reference: /OpenBSD/sys/sys/queue.h|website=bxr.su}}</ref>
बीएसडी लिबक पॉज़िक्स मानक लाइब्रेरी का उत्तम समूह है। जो बीएसडी ऑपरेटिंग सिस्टम जैसे [[FreeBSD|Freeबीएसडी]], [[NetBSD|Netबीएसडी]], [[OpenBSD|Openबीएसडी]] और [[macOS]] के साथ सम्मिलित सी लाइब्रेरीों द्वारा समर्थित है। बीएसडी लिबक में कुछ एक्सटेंशन हैं जो मूल मानक में परिभाषित नहीं हैं। जिनमें से अनेक प्रथम बार सन् 1994 के 4.4 बीएसडी रिलीज में दिखाई दिए (सन् 1989 में जारी किए गए प्रथम मानक के पश्चात् बड़े पैमाने पर विकसित किए गए)। बीएसडी लिबक के कुछ विस्तार हैं।
* <code>fgetln()</code>{{snd}} में परिभाषित <code>stdio.h</code>. इसका उपयोग फ़ाइल लाइन को लाइन से पढ़ने के लिए किया जा सकता है।<ref>{{cite web|url=http://man.freebsd.org/fgetln |title=fgetln |website=Man.freebsd.org |date=1994-04-19 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/stdio/fgetln.c#fgetln|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/stdio/fgetln.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/include/stdio.h|title=Super User's BSD Cross Reference: /OpenBSD/include/stdio.h|website=bxr.su}}</ref>
* <code>fts.h</code>{{snd}} फ़ाइल पदानुक्रम को पार करने के लिए कुछ फ़ंक्शन शामिल हैं<ref>{{cite web|url=http://man.freebsd.org/फीट |title=फीट|website=Man.freebsd.org |date=2012-03-18 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/include/fts.h|title=Super User's BSD Cross Reference: /OpenBSD/include/fts.h|website=bxr.su}}</ref>
* <code>db.h</code>{{snd}} [[बर्कले डीबी]] से जुड़ने के लिए कुछ कार्य<ref>{{cite web|url=http://man.freebsd.org/डाटाबेस |title=डाटाबेस|website=Man.freebsd.org |date=2010-09-10 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/include/db.h|title=Super User's BSD Cross Reference: /OpenBSD/include/db.h|website=bxr.su}}</ref>
* <code>strlcat()</code> और <code>strlcpy()</code>{{snd}} के लिए सुरक्षित विकल्प <code>strncat()</code> और <code>strncpy()</code><ref>Miller, Todd C. and Theo de Raadt. [http://www.usenix.org/events/usenix99/millert.html strlcpy and strlcat - consistent, safe, string copy and concatenation]. Proceedings of the 1999 USENIX Annual Technical Conference, June 6–11, 1999, pp. 175–178.</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strlcat.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcat.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strlcpy.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcpy.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strncat.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncat.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strncpy.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncpy.c|website=bxr.su}}</ref>
* <code>err.h</code>{{snd}} स्वरूपित त्रुटि संदेशों को प्रिंट करने के लिए कुछ फ़ंक्शन शामिल हैं<ref>{{cite web|url=http://man.freebsd.org/ग़लती होना |title=ग़लती होना|website=Man.freebsd.org |date=2012-03-29 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/include/err.h|title=Super User's BSD Cross Reference: /OpenBSD/include/err.h|website=bxr.su}}</ref>
* <code>vis.h</code>{{snd}} शामिल है <code>vis()</code> समारोह। इस फ़ंक्शन का उपयोग गैर-मुद्रण योग्य वर्णों को विज़ुअल स्वरूप में प्रदर्शित करने के लिए किया जाता है।<ref>{{cite web|title=vis(3)|url=http://www.freebsd.org/cgi/man.cgi?query=vis&sektion=3&apropos=0&manpath=FreeBSD+9.1-RELEASE|website=Man.FreeBSD.org|access-date=14 September 2013}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/gen/vis.c#vis|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/gen/vis.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/include/vis.h|title=Super User's BSD Cross Reference: /OpenBSD/include/vis.h|website=bxr.su}}</ref>


 
* <code>sys/tree.h</code>{{snd}} लाल-काले पेड़ और [[पेड़ का पेड़|स्प्ले पेड़]] का कार्यान्‍वयन सम्मिलित है।<ref>{{cite web|url=http://man.freebsd.org/tree|title=tree |website=Man.freebsd.org |date=2007-12-27 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/sys/sys/tree.h|title=Super User's BSD Cross Reference: /OpenBSD/sys/sys/tree.h|website=bxr.su}}</ref>
== अन्य भाषाओं में सी मानक पुस्तकालय ==
* <code>sys/queue.h</code>{{snd}} [[लिंक्ड सूची]],[[क्यू]] [[कतार (डेटा संरचना)|(डेटा संरचना)]], टेल क्यू, आदि का कार्यान्वयन होता है।<ref>{{cite web|url=http://man.freebsd.org/queue |title=queue |website=Man.freebsd.org |date=2011-05-13 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/sys/sys/queue.h|title=Super User's BSD Cross Reference: /OpenBSD/sys/sys/queue.h|website=bxr.su}}</ref>
कुछ भाषाओं में उनके स्वयं के पुस्तकालयों में मानक सी लाइब्रेरी की कार्यक्षमता शामिल होती है। भाषा की संरचना को बेहतर ढंग से अनुकूल बनाने के लिए पुस्तकालय को अनुकूलित किया जा सकता है, लेकिन [[परिचालन शब्दार्थ]] को समान रखा जाता है। [[सी ++]] भाषा, उदाहरण के लिए, [[नाम स्थान (प्रोग्रामिंग)]] में सी मानक पुस्तकालय की कार्यक्षमता शामिल है <code>std</code> (जैसे, <code>std::printf</code>, <code>std::atoi</code>, <code>std::feof</code>), सी वाले के समान नामों वाली हेडर फाइलों में (<code>cstdio</code>, <code>cmath</code>, <code>cstdlib</code>, वगैरह।)। अन्य भाषाएँ जो समान दृष्टिकोण अपनाती हैं, वे हैं D (प्रोग्रामिंग भाषा), [[पर्ल]], [[रूबी (प्रोग्रामिंग भाषा)]] और [[पायथन (प्रोग्रामिंग भाषा)]] का मुख्य कार्यान्वयन जिसे [[CPython]] के रूप में जाना जाता है। पायथन 2 में, उदाहरण के लिए, अंतर्निहित फ़ाइल ऑब्जेक्ट्स को सी के उपयोग से लागू किया गया है <code>stdio</code> पैकेट ,<ref>{{cite web|url=https://docs.python.org/library/stdtypes.html#bltin-file-objects |title=The Python Standard Library: 6.9. File Objects |publisher=Docs.python.org |access-date=28 October 2011}}</ref> ताकि उपलब्ध ऑपरेशंस (ओपन, रीड, राइट, आदि) से संबंधित सी फ़ंक्शंस के समान व्यवहार की उम्मीद की जा सके। [[जंग (प्रोग्रामिंग भाषा)]] में एक टोकरा होता है जिसे कहते हैं {{mono|libc}} जो कई सी फ़ंक्शंस, स्ट्रक्चर्स और अन्य प्रकार की परिभाषाओं का उपयोग करने की अनुमति देता है।<ref>{{cite web|url=https://doc.rust-lang.org/nightly/libc/index.html|title=libc|work=Rust Crates|access-date=31 July 2016|archive-url=https://web.archive.org/web/20160818050524/https://doc.rust-lang.org/nightly/libc/index.html|archive-date=18 August 2016|url-status=dead}}</ref>
* <code>fgetln()</code>{{snd}}<code>stdio.h</code>.  में परिभाषित इसका उपयोग फ़ाइल लाइन को लाइन से पढ़ने के लिए किया जा सकता है।<ref>{{cite web|url=http://man.freebsd.org/fgetln |title=fgetln |website=Man.freebsd.org |date=1994-04-19 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/stdio/fgetln.c#fgetln|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/stdio/fgetln.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/include/stdio.h|title=Super User's BSD Cross Reference: /OpenBSD/include/stdio.h|website=bxr.su}}</ref>
 
* <code>fts.h</code>{{snd}} फ़ाइल पदानुक्रम को पार करने के लिए कुछ फ़ंक्शन सम्मिलित हैं।<ref>{{cite web|url=http://man.freebsd.org/फीट |title=फीट|website=Man.freebsd.org |date=2012-03-18 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/include/fts.h|title=Super User's BSD Cross Reference: /OpenBSD/include/fts.h|website=bxr.su}}</ref>
 
* <code>db.h</code>{{snd}} [[बर्कले डीबी]] से जुड़ने के लिए कुछ कार्य किए जाते है।<ref>{{cite web|url=http://man.freebsd.org/डाटाबेस |title=डाटाबेस|website=Man.freebsd.org |date=2010-09-10 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/include/db.h|title=Super User's BSD Cross Reference: /OpenBSD/include/db.h|website=bxr.su}}</ref>
== अन्य भाषाओं के मानक पुस्तकालयों की तुलना ==
* <code>strlcat()</code> और <code>strlcpy()</code>{{snd}}<code>strncat()</code> और <code>strncpy()</code><ref>Miller, Todd C. and Theo de Raadt. [http://www.usenix.org/events/usenix99/millert.html strlcpy and strlcat - consistent, safe, string copy and concatenation]. Proceedings of the 1999 USENIX Annual Technical Conference, June 6–11, 1999, pp. 175–178.</ref> के लिए सुरक्षित विकल्प।<ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strlcat.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcat.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strlcpy.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcpy.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strncat.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncat.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/string/strncpy.c|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncpy.c|website=bxr.su}}</ref>
सी मानक पुस्तकालय कुछ अन्य भाषाओं के मानक पुस्तकालयों की तुलना में छोटा है। सी लाइब्रेरी गणितीय कार्यों, स्ट्रिंग मैनिपुलेशन, प्रकार रूपांतरण, और फ़ाइल और कंसोल-आधारित I/O का मूल सेट प्रदान करती है। इसमें C++ [[मानक टेम्पलेट लाइब्रेरी]] जैसे कंटेनर (डेटा स्ट्रक्चर) का एक मानक सेट शामिल नहीं है, पूरे [[ग्राफिकल यूज़र इंटरफ़ेस]] (GUI) टूलकिट, नेटवर्किंग टूल्स और [[जावा (सॉफ्टवेयर प्लेटफॉर्म)]] और .NET की अन्य कार्यक्षमताओं की प्रचुरता को तो छोड़ ही दें। फ्रेमवर्क मानक के रूप में प्रदान करते हैं। छोटे मानक पुस्तकालय का मुख्य लाभ यह है कि कार्यशील ISO C वातावरण प्रदान करना अन्य भाषाओं की तुलना में बहुत आसान है, और फलस्वरूप C को एक नए प्लेटफ़ॉर्म पर पोर्ट करना तुलनात्मक रूप से आसान है।
* <code>err.h</code>{{snd}} स्वरूपित त्रुटि संदेशों को प्रिंट करने के लिए कुछ फ़ंक्शन सम्मिलित हैं।<ref>{{cite web|url=http://man.freebsd.org/ग़लती होना |title=ग़लती होना|website=Man.freebsd.org |date=2012-03-29 |access-date=2013-08-25}}</ref><ref>{{cite web|url=http://bxr.su/o/include/err.h|title=Super User's BSD Cross Reference: /OpenBSD/include/err.h|website=bxr.su}}</ref>
* <code>vis.h</code>{{snd}}इसमें फ़ंक्शन <code>vis()</code> सम्मिलित है। इस फ़ंक्शन का उपयोग गैर-मुद्रण योग्य वर्णों को विज़ुअल स्वरूप में प्रदर्शित करने के लिए किया जाता है।<ref>{{cite web|title=vis(3)|url=http://www.freebsd.org/cgi/man.cgi?query=vis&sektion=3&apropos=0&manpath=FreeBSD+9.1-RELEASE|website=Man.FreeBSD.org|access-date=14 September 2013}}</ref><ref>{{cite web|url=http://bxr.su/o/lib/libc/gen/vis.c#vis|title=Super User's BSD Cross Reference: /OpenBSD/lib/libc/gen/vis.c|website=bxr.su}}</ref><ref>{{cite web|url=http://bxr.su/o/include/vis.h|title=Super User's BSD Cross Reference: /OpenBSD/include/vis.h|website=bxr.su}}</ref>
== अन्य भाषाओं में सी मानक लाइब्रेरी ==
कुछ भाषाओं में उनके स्वयं के लाइब्रेरीों में मानक सी लाइब्रेरी की कार्यक्षमता सम्मिलित होती है। भाषा की संरचना को उत्तम  से अनुकूल बनाने के लिए लाइब्रेरी को अनुकूलित किया जा सकता है, किन्तु [[परिचालन शब्दार्थ]] को समान रखा जाता है। [[सी ++]] भाषा, उदाहरण के लिए, [[नाम स्थान (प्रोग्रामिंग)]] में सी मानक लाइब्रेरी की कार्यक्षमता सम्मिलित है <code>std</code> (जैसे, <code>std::printf</code>, <code>std::atoi</code>, <code>std::feof</code>), सी वाले के समान नामों वाली शीर्षलेख फाइलों में (<code>cstdio</code>, <code>cmath</code>, <code>cstdlib</code>, वगैरह।)। अन्य भाषाएँ जो समान दृष्टिकोण अपनाती हैं, वे हैं D (प्रोग्रामिंग भाषा), [[पर्ल]], [[रूबी (प्रोग्रामिंग भाषा)]] और [[पायथन (प्रोग्रामिंग भाषा)]] का मुख्य कार्यान्वयन जिस [[CPython|सी]][[पायथन (प्रोग्रामिंग भाषा)|पायथन]] के रूप में जाना जाता है। पायथन 2 में, उदाहरण के लिए, अंतर्निहित फ़ाइल ऑब्जेक्ट्स को सी के उपयोग से प्रयुक्त किया गया है <code>stdio</code> पैकेट ,<ref>{{cite web|url=https://docs.python.org/library/stdtypes.html#bltin-file-objects |title=The Python Standard Library: 6.9. File Objects |publisher=Docs.python.org |access-date=28 October 2011}}</ref> जिससे कि उपलब्ध ऑपरेशंस (ओपन, रीड, राइट, आदि) से संबंधित सी फ़ंक्शंस के समान व्यवहार की उम्मीद की जा सकती है। [[जंग (प्रोग्रामिंग भाषा)]] में टोकरा होता है जिसे कहते हैं {{mono|libc}} जो कई सी फ़ंक्शंस, स्ट्रक्चर्स और अन्य प्रकार की परिभाषाओं का उपयोग करने की अनुमति देता है।<ref>{{cite web|url=https://doc.rust-lang.org/nightly/libc/index.html|title=libc|work=Rust Crates|access-date=31 July 2016|archive-url=https://web.archive.org/web/20160818050524/https://doc.rust-lang.org/nightly/libc/index.html|archive-date=18 August 2016|url-status=dead}}</ref>
== अन्य भाषाओं के मानक लाइब्रेरीों की तुलना ==
सी मानक लाइब्रेरी कुछ अन्य भाषाओं के मानक लाइब्रेरीों की तुलना में छोटा है। सी लाइब्रेरी गणितीय कार्यों, स्ट्रिंग मैनिपुलेशन, प्रकार रूपांतरण, और फ़ाइल और कंसोल-आधारित I/O का मूल समूह प्रदान करती है। इसमें सी++ [[मानक टेम्पलेट लाइब्रेरी]] जैसे कंटेनर (डेटा स्ट्रक्चर) का मानक समूह सम्मिलित नहीं है, पूरे [[ग्राफिकल यूज़र इंटरफ़ेस]] (जीयूआई) टूलकिट, नेटवर्किंग टूल्स और [[जावा (सॉफ्टवेयर प्लेटफॉर्म)]] और .NET की अन्य कार्यक्षमताओं की प्रचुरता को तो छोड़ ही दें। फ्रेमवर्क मानक के रूप में प्रदान करते हैं। छोटे मानक लाइब्रेरी का मुख्य लाभ यह है कि कार्यशील आईएसओ सी वातावरण प्रदान करना अन्य भाषाओं की तुलना में बहुत आसान है, और फलस्वरूप सी को नए प्लेटफ़ॉर्म पर पोर्ट करना तुलनात्मक रूप से आसान है।


== यह भी देखें ==
== यह भी देखें ==
* [[सी ++ मानक पुस्तकालय]]
* [[सी ++ मानक पुस्तकालय|सी ++ मानक लाइब्रेरी]]


== टिप्पणियाँ ==
== टिप्पणियाँ ==
Line 204: Line 202:
*[https://web.archive.org/web/20150118141700/http://www.acm.uiuc.edu/webmonkeys/book/c_guide/index.html The C Library Reference Guide]
*[https://web.archive.org/web/20150118141700/http://www.acm.uiuc.edu/webmonkeys/book/c_guide/index.html The C Library Reference Guide]
*[http://www.schweikhardt.net/identifiers.html Handy list of which headers are in which standard]
*[http://www.schweikhardt.net/identifiers.html Handy list of which headers are in which standard]
* Microsoft [https://docs.microsoft.com/en-us/cpp/c-runtime-library/run-time-routines-by-category Universal C runtime routines by category] on MSDN
* माइक्रोसॉफ़्ट [https://docs.microsoft.com/en-us/cpp/c-runtime-library/run-time-routines-by-category Universal C runtime routines by category] on MSDN
* NetBSD [http://netbsd.gw.com/cgi-bin/man-cgi?intro+3+NetBSD-current C libraries manual] {{Webarchive|url=https://web.archive.org/web/20151223092755/http://netbsd.gw.com/cgi-bin/man-cgi?intro+3+NetBSD-current |date=2015-12-23 }} and [http://BXR.SU/NetBSD/lib/libc/ full C library source]
* Netबीएसडी [http://netbsd.gw.com/cgi-bin/man-cgi?intro+3+NetBSD-current C libraries manual] {{Webarchive|url=https://web.archive.org/web/20151223092755/http://netbsd.gw.com/cgi-bin/man-cgi?intro+3+NetBSD-current |date=2015-12-23 }} and [http://BXR.SU/NetBSD/lib/libc/ full C library source]
* [http://man.cat-v.org/unix-1st/3/ Manual pages for the original C standard libraries in Unix]
* [http://man.cat-v.org/unix-1st/3/ Manual pages for the original C standard libraries in Unix]


{{C programming language|state=expanded}}
{{C programming language|state=expanded}}


{{DEFAULTSORT:C Standard Library}}[[Category: सी मानक पुस्तकालय | सी मानक पुस्तकालय ]] [[Category: सी (प्रोग्रामिंग भाषा)]]
{{DEFAULTSORT:C Standard Library}}
 
 


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page|C Standard Library]]
[[Category:Created On 18/02/2023]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 errors]]
[[Category:CS1 maint]]
[[Category:Collapse templates|C Standard Library]]
[[Category:Created On 18/02/2023|C Standard Library]]
[[Category:Lua-based templates|C Standard Library]]
[[Category:Machine Translated Page|C Standard Library]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|C Standard Library]]
[[Category:Pages with script errors|C Standard Library]]
[[Category:Short description with empty Wikidata description|C Standard Library]]
[[Category:Sidebars with styles needing conversion|C Standard Library]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|C Standard Library]]
[[Category:Templates generating microformats|C Standard Library]]
[[Category:Templates that add a tracking category|C Standard Library]]
[[Category:Templates that are not mobile friendly|C Standard Library]]
[[Category:Templates that generate short descriptions|C Standard Library]]
[[Category:Templates using TemplateData|C Standard Library]]
[[Category:Webarchive template wayback links|C Standard Library]]
[[Category:Wikipedia metatemplates|C Standard Library]]
[[Category:सी (प्रोग्रामिंग भाषा)|C Standard Library]]
[[Category:सी मानक पुस्तकालय| सी मानक पुस्तकालय ]]

Latest revision as of 16:26, 11 March 2023

सी मानक लाइब्रेरी या लिबक, सी (प्रोग्रामिंग भाषा) के लिए मानक लाइब्रेरी है। जैसा कि आईएसओ सी मानक में निर्दिष्ट है।[1] मूल एएनएसआई सी मानक से प्रारंभ होकर इसे उसी समय सी लाइब्रेरी पॉज़िक्स विनिर्देश के रूप में विकसित किया गया था। जो इसका सुपरसमूह है।[2][3] चूंकि एएनएसआई सी को मानकीकरण के लिए अंतर्राष्ट्रीय संगठन द्वारा अपनाया गया था।[4] अतः सी मानक लाइब्रेरी को आईएसओ सी लाइब्रेरी भी कहा जाता है।

सी मानक लाइब्रेरी हैंडलिंग, गणितीय संगणना, इनपुट / आउटपुट प्रोसेसिंग, मेमोरी प्रबंधन, और कई अन्य ऑपरेटिंग सिस्टम सेवाओं जैसे मैक्रो (कंप्यूटर विज्ञान), प्रकार की परिभाषाएं और फ़ंक्शन प्रदान करता है।

एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई)

शीर्षलेख फ़ाइलें

सी मानक लाइब्रेरी का एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) कई शीर्षलेख फ़ाइलों में घोषित किया गया है। प्रत्येक शीर्ष लेख फ़ाइल में या अधिक फ़ंक्शन घोषणाएँ, डेटा प्रकार परिभाषाएँ और मैक्रोज़ होते हैं।

स्थिरता की लंबी अवधि के पश्चात्, तीन नई शीर्षलेख फ़ाइलें (iso646.h, wchar.h, और wctype.h) नॉर्मेटिव ऐडेंडम 1 (NA1) के साथ जोड़े गए थे। जो 1995 में प्रमाणित सी मानक के अतिरिक्त थी। चूँकि छह और शीर्षलेख फाइलें (complex.h, fenv.h, inttypes.h, stdbool.h, stdint.h, और tgmath.h) को सी99 के साथ जोड़ा गया था। जो सन् 1999 में प्रकाशित सी मानक में संशोधन था, और पांच और फाइलें (stdalign.h, stdatomic.h, stdnoreturn.h, threads.h, और uchar.h) सन् 2011 में सी11 (सी मानक संशोधन) के साथ सम्मिलित थी। अतः कुल मिलाकर अब 29 शीर्षलेख फाइलें हैं।

नाम से विवरण
<assert.h> एक कार्यक्रम के डिबगिंग संस्करणों में तार्किक त्रुटियों और अन्य प्रकार की बगों का पता लगाने में सहायता के लिए उपयोग किए जाने वाले मुखर मैक्रो सम्मिलित हैं।
<complex.h> सी99 जटिल संख्याओं में हेरफेर करने के लिए कार्यों का समूह
<ctype.h> वर्णों को उनके प्रकारों के आधार पर वर्गीकृत करने के लिए या ऊपरी और निचली स्थिति के मध्य परिवर्तित करने के लिए उपयोग किए जाने वाले कार्यों के समूह को परिभाषित करता है। जो प्रयुक्त वर्ण समूह से स्वतंत्र है। (सामान्यतः एएससीआईआई या इसके प्रारूप में से, चूँकि ईबीसीडीआईसी का उपयोग करने वाले कार्यान्वयन भी ज्ञात हैं)।
<errno.h> लाइब्रेरी कार्यों द्वारा वर्णन किए गए त्रुटि कोड के परीक्षण के लिए।
<fenv.h> सी99 फ़्लोटिंग-पॉइंट वातावरण को नियंत्रित करने के लिए कार्यों के समूह को परिभाषित करता है।
<float.h> फ़्लोटिंग-पॉइंट लाइब्रेरी के कार्यान्वयन-विशिष्ट गुणों को निर्दिष्ट करने वाले मैक्रो स्थिरांक को परिभाषित करता है।
<inttypes.h> सी99 सटीक-चौड़ाई पूर्णांक प्रकारों को परिभाषित करता है।
<iso646.h> एनए1 यह अनेक मैक्रोज़ को परिभाषित करता है। जो अनेक मानक टोकन व्यक्त करने के वैकल्पिक प्रकारों को प्रयुक्त करता है। आईएसओ 646 सामान्यीकरण समूह में प्रोग्रामिंग के लिए।
<limits.h> पूर्णांक प्रकारों के कार्यान्वयन-विशिष्ट गुणों को निर्दिष्ट करने वाले मैक्रो स्थिरांक को परिभाषित करता है।
<locale.h> स्थानीयकरण कार्यों को परिभाषित करता है।
<math.h> सामान्य गणितीय कार्यों को परिभाषित करता है।
<setjmp.h> मैक्रोज़setjmp और longjmp की घोषणा करता है, जिनका उपयोग गैर-स्थानीय निकास के लिए किया जाता है।
<signal.h> सिग्नल-हैंडलिंग कार्यों को परिभाषित करता है।
<stdalign.h> सी11 वस्तुओं के संरेखण को क्वेरी करने और निर्दिष्ट करने के लिए।
<stdarg.h> कार्यों में पारित तर्कों की एक अलग संख्या तक पहुँचने के लिए।
<stdatomic.h> सी11 थ्रेड्स के मध्य साझा किए गए डेटा पर परमाणु संचालन के लिए।
<stdbool.h> सी99 बूलियन डेटा प्रकार को परिभाषित करता है।
<stddef.h> कई उपयोगी प्रकारों और मैक्रोज़ को परिभाषित करता है।
<stdint.h> सी99 सटीक-चौड़ाई पूर्णांक प्रकारों को परिभाषित करता है।
<stdio.h> कोर इनपुट और आउटपुट कार्यों को परिभाषित करता है।
<stdlib.h> संख्यात्मक रूपांतरण कार्यों, छद्म-यादृच्छिक संख्या पीढ़ी कार्यों, स्मृति आवंटन, प्रक्रिया नियंत्रण कार्यों को परिभाषित करता है।
<stdnoreturn.h> सी11 गैर-लौटने वाले कार्यों को निर्दिष्ट करने के लिए।
<string.h> स्ट्रिंग-हैंडलिंग फ़ंक्शन को परिभाषित करता है।
<tgmath.h> सी99 टाइप-जेनेरिक गणितीय कार्यों को परिभाषित करता है।
<threads.h> सी11 एकाधिक धागे, म्यूटेक्स और हालत चर के प्रबंधन के लिए कार्यों को परिभाषित करता है।
<time.h> दिनांक और समय प्रबंधन कार्यों को परिभाषित करता है।
<uchar.h> सी11 यूनिकोड वर्णों में हेरफेर करने के लिए प्रकार और कार्य।
<wchar.h> एनए1 वाइड-स्ट्रिंग-हैंडलिंग फ़ंक्शन को परिभाषित करता है।
<wctype.h> एनए1 विस्तृत वर्णों को उनके प्रकारों के आधार पर वर्गीकृत करने या ऊपरी और निचले स्थिति के मध्य परिवर्तित करने के लिए उपयोग किए जाने वाले कार्यों के समूह को परिभाषित करता है

शीर्षलेख फ़ाइलों में से तीन (complex.h, stdatomic.h, और threads.h) सशर्त विशेषताएं हैं। जिनका समर्थन करने के लिए कार्यान्वयन की आवश्यकता नहीं है।

पॉज़िक्स मानक ने यूनिक्स-विशिष्ट कार्यक्षमता के लिए कई गैर-मानक सी शीर्षलेख जोड़े जाते है। अतः अन्य आर्किटेक्चर के लिए अपना मार्ग खोज लिया है। उदाहरणों में सम्मिलित fcntl.h और unistd.h. अनेक अन्य समूह अन्य गैर-मानक शीर्षलेखों का उपयोग कर रहे हैं - जीएनयू सी लाइब्रेरी में alloca.h, है और HP OpenVMS में va_count() फ़ंक्शन है।।

दस्तावेज़

यूनिक्स जैसी प्रणालियों पर, वास्तव में कार्यान्वित एपीआई का आधिकारिक दस्तावेज मैन पेज के रूप में प्रदान किया जाता है। अधिकांश प्रणालियों पर, मानक लाइब्रेरी कार्यों पर मैन पेज अनुभाग 3 में होते हैं; अनुभाग 7 में अंतर्निहित अवधारणाओं पर कुछ और सामान्य पृष्ठ हो सकते हैं। (उदाहरण के लिए man 7 math_error लिनक्स में)।

कार्यान्वयन

यूनिक्स जैसी प्रणालियों में सामान्यतः साझा लाइब्रेरी के रूप में सी लाइब्रेरी होती है, किन्तु शीर्षलेख फाइलें (और कंपाइलर टूलचैन) इंस्टॉलेशन से अनुपस्थित हो सकती हैं। इसलिए सी विकास संभव नहीं हो सकता है। सी लाइब्रेरी को यूनिक्स जैसी प्रणालियों पर ऑपरेटिंग सिस्टम का भाग माना जाता है। आईएसओ सी मानक वाले सी कार्यों का व्यापक रूप से कार्यक्रमों द्वारा उपयोग किया जाता है, और माना जाता है कि वह न केवल सी भाषा में कुछ का कार्यान्वयन थे। बल्कि ऑपरेटिंग सिस्टम इंटरफ़ेस का वास्तविक भाग भी थे। यदि सी लाइब्रेरी मिटा दी जाती है। तब यूनिक्स-जैसी ऑपरेटिंग सिस्टम सामान्यतः कार्य नहीं कर सकते हैं। यह उन अनुप्रयोगों के लिए सही है जो स्थिर रूप से जुड़े होने के विपरीत गतिशील हैं। इसके अतिरिक्त, स्वयं कर्नेल (लिनक्स के स्थितिमें कम से कम) किसी भी लाइब्रेरी से स्वतंत्र रूप से संचालित होता है।

माइक्रोसॉफ़्ट विंडोज़ पर, कोर सिस्टम डायनेमिक लाइब्रेरी (डायनेमिक-लिंक लाइब्रेरी) माइक्रोसॉफ़्ट विसुअल सी++ कंपाइलर वी6.0 के लिए सी मानक लाइब्रेरी का कार्यान्वयन प्रदान करती है। माइक्रोसॉफ़्ट विसुअल सी++ कंपाइलर के नए संस्करणों के लिए सी मानक लाइब्रेरी प्रत्येक कंपाइलर द्वारा व्यक्तिगत रूप से साथ ही पुनर्वितरण योग्य पैकेज द्वारा प्रदान की जाती है। सी में लिखे गए संकलित अनुप्रयोग या तो स्थिर रूप से सी लाइब्रेरी से जुड़े होते हैं या साझा लाइब्रेरी के गतिशील संस्करण से जुड़े होते हैं। जो लक्षित सिस्टम पर उपस्तिथ होने के अतिरिक्त इन अनुप्रयोगों के साथ भेजे जाते हैं। कंपाइलर की सी लाइब्रेरी में फ़ंक्शंस को माइक्रोसॉफ़्ट विंडोज़ के इंटरफ़ेस के रूप में नहीं माना जाता है।

कई अन्य कार्यान्वयन उपस्तिथ हैं, जो विभिन्न ऑपरेटिंग सिस्टम और सी कंपाइलर दोनों के साथ उपलब्ध हैं। कुछ लोकप्रिय कार्यान्वयन निम्नलिखित हैं।

  • बीएसडी लिबक, बर्कले सॉफ्टवेयर वितरण-व्युत्पन्न ऑपरेटिंग सिस्टम के साथ वितरित विभिन्न कार्यान्वयन।
  • जीएनयू सी लाइब्रेरी (gलिबक), जीएनयू हर्ड, जीएनयू/केफ्रीबीएसडी और लिनक्स में प्रयुक्त।
  • विंडोज लाइब्रेरी फ़ाइलें सीआरटी माइक्रोसॉफ़्ट सी रन-टाइम लाइब्रेरी, माइक्रोसॉफ़्ट Visual C++ का भाग।
  • डायटलिबक, सी मानक लाइब्रेरी का वैकल्पिक छोटा कार्यान्वयन (एमएमयू-कम)।
  • uCलिबक, एम्बेडेड μCलिनक्स सिस्टम के लिए सी मानक लाइब्रेरी (एमएमयू-कम)।
  • ucलिबक-ng, एम्बेडेड सी लाइब्रेरी, μCलिबक का फोर्क, स्मृति प्रबंधन इकाई (एमएमयू) समर्थन के साथ अभी भी अनुरक्षित है।
  • न्यूलिब, एम्बेडेड सिस्टम के लिए सी मानक लाइब्रेरी (एमएमयू-कम)[5] और विंडोज के लिए Cygwin जीएनयू वितरण में उपयोग किया जाता है।

कंपाइलर अंतर्निहित कार्य

कुछ संकलक (उदाहरण के लिए, जीएनयू संकलक संग्रह[7]) सी मानक लाइब्रेरी में कई कार्यों के अंतर्निर्मित संस्करण प्रदान करते है। अर्थात्, कार्यों के कार्यान्वयन को संकलित वस्तु फ़ाइल में लिखा गया है, और प्रोग्राम सी लाइब्रेरी साझा ऑब्जेक्ट फ़ाइल में फ़ंक्शंस के अतिरिक्त अंतर्निहित संस्करणों को कॉल करता है। यह फ़ंक्शन-कॉल ओवरहेड को कम करता है। विशेष रूप से यदि फ़ंक्शन कॉल को इनलाइन फ़ंक्शन वेरिएंट के साथ परिवर्तित कर दिया जाता है, और संकलक अनुकूलन के अन्य रूपों की अनुमति देता है (जैसा कि कंपाइलर बहाव को नियंत्रित करना जानता है। बिल्ट-इन वेरिएंट की कंट्रोल-फ्लो विशेषताओं), किन्तु काल्पनिक धारणा उत्पन्न कर सकता है। जब डिबगिंग (उदाहरण के लिए, अंतर्निहित संस्करणों को इंस्ट्रूमेंटेशन (कंप्यूटर प्रोग्रामिंग) वेरिएंट से परिवर्तित नहीं किया जा सकता है)।

चूंकि, अंतर्निहित कार्यों को आईएसओ सी के अनुसार सामान्य कार्यों की प्रकार व्यवहार करना चाहिए। मुख्य निहितार्थ यह है कि प्रोग्राम को इन कार्यों के लिए उनका पता लेकर सूचक बनाने में सक्षम होना चाहिए, और उस सूचक के माध्यम से कार्य को प्रयुक्त करना चाहिए। यदि प्रोग्राम में दो भिन्न-भिन्न अनुवाद इकाइयों में ही फ़ंक्शन के दो पॉइंटर्स व्युत्पन्न होते हैं, तो इन दो पॉइंटर्स को समान्तर तुलना करनी चाहिए; अर्थात्, पता फ़ंक्शन के नाम को हल करके आता है, जिसमें बाहरी (प्रोग्राम-वाइड) लिंकेज है।

लिंकिंग, libm

फ्रीबीएसडी के अनुसार [8] और ग्लिबैक,[9] कुछ फ़ंक्शन जैसे sin() डिफ़ॉल्ट रूप से लिंक नहीं होते हैं और इसके अतिरिक्त गणितीय लाइब्रेरी libm में बंडल किए जाते हैं। यदि उनमें से किसी का उपयोग किया जाता है, तो लिंकर को निर्देश दिया जाना चाहिए -lm. पॉज़िक्स के लिए आवश्यक है कि सी99 कंपाइलर समर्थन करता है -lm, और यह कि शीर्षलेख में घोषित किए गए कार्य math.h, complex.h, और fenv.h लिंक करने के लिए उपलब्ध हैं यदि -lm निर्दिष्ट है, किन्तु यह निर्दिष्ट नहीं करता है कि फ़ंक्शन डिफ़ॉल्ट रूप से लिंक किए गए हैं या नहीं।[10] musl सब कुछ ही लिबक लाइब्रेरी में डालकर और खाली libm प्रदान करके इस आवश्यकता को पूर्ण करता है।[11]

खोज

सी मानक के अनुसार मैक्रो __STDC_HOSTED__ कार्यान्वयन की मेजबानी होने पर 1 को परिभाषित किया जाता है। होस्टेड कार्यान्वयन में सी मानक द्वारा निर्दिष्ट सभी शीर्षलेख हैं। कार्यान्वयन फ्रीस्टैंडिंग भी हो सकता है, जिसका अर्थ है कि ये शीर्षलेख उपस्तिथ नहीं होते है। यदि कार्यान्वयन 'फ्रीस्टैंडिंग' है, तब यह __STDC_HOSTED__ से 0 परिभाषित करता है।

समस्याएं और समाधान

बफ़र अधिकता भेद्यता

सी मानक लाइब्रेरी में कुछ कार्य बफर अतिप्रवाह कमजोरियों के लिए कुख्यात रहे हैं और सामान्यतः बग्गी प्रोग्रामिंग को उनके गोद लेने के पश्चात् से प्रोत्साहित करते हैं।[lower-alpha 1] अतः यह सबसे अधिक आलोचना वाली वस्तुएँ हैं।

  • स्ट्रिंग-मैनिपुलेशन रूटीन, सहित strcpy() और strcat(), सीमा जाँच की कमी और संभावित बफर ओवरफ़्लो के लिए यदि सीमाएँ मैन्युअल रूप से जाँची नहीं जाती हैं।
  • साइड इफेक्ट (कंप्यूटर विज्ञान) के लिए सामान्य रूप से स्ट्रिंग रूटीन साइड-इफेक्ट्स के लिए, गैर-जिम्मेदार बफर उपयोग को प्रोत्साहित करना, हमेशा वैध अशक्त-समाप्त स्ट्रिंग की गारंटी नहीं देता है।[lower-alpha 2]
  • printf() रूटीन का समूह, कॉल स्टैक को खराब करने के लिए जब प्रारूप स्ट्रिंग दिए गए तर्कों से मेल नहीं खाती है। इस मौलिक दोष ने हमलों की पूरी श्रेणी बनाई, प्रारूप स्ट्रिंग हमले।
  • gets() और scanf() I/O रूटीन का समूह, (या तो कोई या आसान) इनपुट लंबाई जाँच की कमी के लिए होता है।

gets()के साथ चरम स्थितिको छोड़कर स्मृति प्रबंधन, सीमा जाँच, इनपुट जाँच आदि करने के लिए सहायक कोड प्रारंभ करके सभी सुरक्षा कमजोरियों से बचा जा सकता है। यह अधिकांशतः रैपर के रूप में किया जाता है जो मानक लाइब्रेरी फ़ंक्शंस को सुरक्षित और उपयोग में आसान बनाता है। यह बी. कर्निघन और आर. पाइक की प्रोग्रामिंग का अभ्यास पुस्तक के समय से पूर्व का है, जहां लेखक सामान्यतः रैपर का उपयोग करते हैं जो त्रुटि संदेशों को प्रिंट करते हैं और यदि कोई त्रुटि होती है तो प्रोग्राम को छोड़ देते हैं।

आईएसओ सी समिति ने तकनीकी रिपोर्ट टीआर 24731-1 प्रकाशित की गयी थी।[12] और टीआर 24731-2 पर कार्य कर रहा है।[13] सीमा जाँच और स्वत: बफर आवंटन के साथ कुछ कार्यों को अपनाने का प्रस्ताव करता है। पूर्व को कुछ प्रशंसा के साथ कड़ी आलोचना का सामना करना पड़ता है,[14][15]और बाद वाले को मिश्रित प्रतिक्रियाएँ मिलती है। इसके अतिरिक्त, टीआर 24731-1 को माइक्रोसॉफ्ट के सी मानक लाइब्रेरी में प्रयुक्त किया गया है और इसके संकलक पुराने असुरक्षित कार्यों का उपयोग करते समय चेतावनियां जारी करते हैं।

थ्रेडिंग समस्याएं, दौड़ की स्थिति के लिए भेद्यता

strerror() रूटीन की थ्रेड असुरक्षित होने और अन्यथा दौड़ की स्थिति के प्रति संवेदनशील होने के लिए आलोचना की जाती है।

त्रुटि प्रबंधन

सी मानक लाइब्रेरी में कार्यों की त्रुटि प्रबंधन संगत नहीं है और कभी-कभी भ्रमित होती है। लिनक्स मैनुअल पेज math_error, के अनुसार, "ग्लिबैक के तहत वर्तमान (संस्करण 2.8) स्थिति गड़बड़ है। अधिकांश (लेकिन सभी नहीं) फ़ंक्शन त्रुटियों पर अपवाद उठाते हैं। कुछ इरनो भी समूह करते हैं। कुछ फ़ंक्शन इरनो समूह करते हैं, लेकिन कोई वृद्धि नहीं करते हैं अपवाद। बहुत कम कार्य न तो करते हैं।"[16]

मानकीकरण

कोबोल और फोरट्रान जैसी पारंपरिक भाषाओं के विपरीत, मूल सी (प्रोग्रामिंग भाषा) ने I/O संचालन जैसे कोई अंतर्निहित कार्य प्रदान नहीं किए है। चूँकि समय के साथ, सी के उपयोगकर्ता समुदायों ने विचारों और कार्यान्वयन को साझा किया जिसे अब सी मानक लाइब्रेरी कहा जाता है। इनमें से कई विचारों को अंततः मानकीकृत सी भाषा की परिभाषा में सम्मिलित किया गया है।

यूनिक्स और सी दोनों को सन् 1960 के दशक के अंत और सन् 1970 के दशक के प्रारंभ में बेल लैब्स एटी एंड टी की बेल प्रयोगशालाओं में बनाया गया था। सन् 1970 के दशक के समय सी भाषा तेजी से लोकप्रिय हुई थी। कई विश्वविद्यालयों और संगठनों ने अपनी स्वयं की परियोजनाओं के लिए भाषा के अपने संस्करण बनाने में प्रारंभ कर दिए थे। सन् 1980 के दशक की शुरुआत तक विभिन्न सी कार्यान्वयनों के मध्य संगतता समस्याएं स्पष्ट हो गईं थी। सन् 1983 में अमेरिकी राष्ट्रीय मानक संस्थान (एएनएसआई) ने एएनएसआई सी नामक सी के मानक विनिर्देश स्थापित करने के लिए समिति का गठन किया था। यह कार्य सन् 1989 में तथाकथित सी89 मानक के निर्माण में समाप्त हुआ था। अतः परिणामी मानक का भाग सॉफ्टवेयर लाइब्रेरी का समूह था। जिसे एएनएसआई सी मानक लाइब्रेरी कहा जाता है।

पॉज़िक्स मानक लाइब्रेरी

पॉज़िक्स, साथ ही एकल यूनिक्स विशिष्टता, कई रूटीनों को निर्दिष्ट करती है। जो मूल सी मानक लाइब्रेरी में उपलब्ध होने चाहिए। पॉज़िक्स विनिर्देशन में अन्य उपयोगों के साथ-साथ पॉज़िक्स थ्रेड्स मल्टी-थ्रेडिंग, बर्कले सॉकेट और नियमित अभिव्यक्ति के लिए शीर्षलेख फाइलें सम्मिलित हैं। इन्हें अधिकांशतः सी मानक लाइब्रेरी कार्यक्षमता के साथ निकटता की अलग-अलग डिग्री के साथ कार्यान्वित किया जाता है। उदाहरण के लिए, ग्लिबैक जैसे fork अंदर लिबक.so कार्यों को प्रयुक्त करता है। किन्तु एनपीटीएल को ग्लिबैक में मिलाने से पूर्व इसने अपने स्वयं के लिंकर फ़्लैग तर्क के साथ भिन्न लाइब्रेरी का गठन किया है। अधिकांशतः, इस पॉज़िक्स-निर्दिष्ट कार्यक्षमता को लाइब्रेरी के भाग के रूप में माना जाता है। मूल सी लाइब्रेरी को एएनएसआई या मानकीकरण सी लाइब्रेरी के लिए अंतर्राष्ट्रीय संगठन के रूप में पहचाना जा सकता है।

बीएसडी लिबक

बीएसडी लिबक पॉज़िक्स मानक लाइब्रेरी का उत्तम समूह है। जो बीएसडी ऑपरेटिंग सिस्टम जैसे Freeबीएसडी, Netबीएसडी, Openबीएसडी और macOS के साथ सम्मिलित सी लाइब्रेरीों द्वारा समर्थित है। बीएसडी लिबक में कुछ एक्सटेंशन हैं जो मूल मानक में परिभाषित नहीं हैं। जिनमें से अनेक प्रथम बार सन् 1994 के 4.4 बीएसडी रिलीज में दिखाई दिए (सन् 1989 में जारी किए गए प्रथम मानक के पश्चात् बड़े पैमाने पर विकसित किए गए)। बीएसडी लिबक के कुछ विस्तार हैं।

  • sys/tree.h – लाल-काले पेड़ और स्प्ले पेड़ का कार्यान्‍वयन सम्मिलित है।[17][18]
  • sys/queue.h – लिंक्ड सूची,क्यू (डेटा संरचना), टेल क्यू, आदि का कार्यान्वयन होता है।[19][20]
  • fgetln() – stdio.h. में परिभाषित इसका उपयोग फ़ाइल लाइन को लाइन से पढ़ने के लिए किया जा सकता है।[21][22][23]
  • fts.h – फ़ाइल पदानुक्रम को पार करने के लिए कुछ फ़ंक्शन सम्मिलित हैं।[24][25]
  • db.h – बर्कले डीबी से जुड़ने के लिए कुछ कार्य किए जाते है।[26][27]
  • strlcat() और strlcpy() – strncat() और strncpy()[28] के लिए सुरक्षित विकल्प।[29][30][31][32]
  • err.h – स्वरूपित त्रुटि संदेशों को प्रिंट करने के लिए कुछ फ़ंक्शन सम्मिलित हैं।[33][34]
  • vis.h – इसमें फ़ंक्शन vis() सम्मिलित है। इस फ़ंक्शन का उपयोग गैर-मुद्रण योग्य वर्णों को विज़ुअल स्वरूप में प्रदर्शित करने के लिए किया जाता है।[35][36][37]

अन्य भाषाओं में सी मानक लाइब्रेरी

कुछ भाषाओं में उनके स्वयं के लाइब्रेरीों में मानक सी लाइब्रेरी की कार्यक्षमता सम्मिलित होती है। भाषा की संरचना को उत्तम से अनुकूल बनाने के लिए लाइब्रेरी को अनुकूलित किया जा सकता है, किन्तु परिचालन शब्दार्थ को समान रखा जाता है। सी ++ भाषा, उदाहरण के लिए, नाम स्थान (प्रोग्रामिंग) में सी मानक लाइब्रेरी की कार्यक्षमता सम्मिलित है std (जैसे, std::printf, std::atoi, std::feof), सी वाले के समान नामों वाली शीर्षलेख फाइलों में (cstdio, cmath, cstdlib, वगैरह।)। अन्य भाषाएँ जो समान दृष्टिकोण अपनाती हैं, वे हैं D (प्रोग्रामिंग भाषा), पर्ल, रूबी (प्रोग्रामिंग भाषा) और पायथन (प्रोग्रामिंग भाषा) का मुख्य कार्यान्वयन जिस सीपायथन के रूप में जाना जाता है। पायथन 2 में, उदाहरण के लिए, अंतर्निहित फ़ाइल ऑब्जेक्ट्स को सी के उपयोग से प्रयुक्त किया गया है stdio पैकेट ,[38] जिससे कि उपलब्ध ऑपरेशंस (ओपन, रीड, राइट, आदि) से संबंधित सी फ़ंक्शंस के समान व्यवहार की उम्मीद की जा सकती है। जंग (प्रोग्रामिंग भाषा) में टोकरा होता है जिसे कहते हैं libc जो कई सी फ़ंक्शंस, स्ट्रक्चर्स और अन्य प्रकार की परिभाषाओं का उपयोग करने की अनुमति देता है।[39]

अन्य भाषाओं के मानक लाइब्रेरीों की तुलना

सी मानक लाइब्रेरी कुछ अन्य भाषाओं के मानक लाइब्रेरीों की तुलना में छोटा है। सी लाइब्रेरी गणितीय कार्यों, स्ट्रिंग मैनिपुलेशन, प्रकार रूपांतरण, और फ़ाइल और कंसोल-आधारित I/O का मूल समूह प्रदान करती है। इसमें सी++ मानक टेम्पलेट लाइब्रेरी जैसे कंटेनर (डेटा स्ट्रक्चर) का मानक समूह सम्मिलित नहीं है, पूरे ग्राफिकल यूज़र इंटरफ़ेस (जीयूआई) टूलकिट, नेटवर्किंग टूल्स और जावा (सॉफ्टवेयर प्लेटफॉर्म) और .NET की अन्य कार्यक्षमताओं की प्रचुरता को तो छोड़ ही दें। फ्रेमवर्क मानक के रूप में प्रदान करते हैं। छोटे मानक लाइब्रेरी का मुख्य लाभ यह है कि कार्यशील आईएसओ सी वातावरण प्रदान करना अन्य भाषाओं की तुलना में बहुत आसान है, और फलस्वरूप सी को नए प्लेटफ़ॉर्म पर पोर्ट करना तुलनात्मक रूप से आसान है।

यह भी देखें

टिप्पणियाँ

  1. Morris worm that takes advantage of the well-known vulnerability in gets() have been created as early as in 1988.
  2. in C standard library, string length calculation and looking for a string's end have linear time complexities and are inefficient when used on the same or related strings repeatedly


संदर्भ

  1. ISO/IEC (2018). ISO/IEC 9899:2018(E): Programming Languages - C §7
  2. "The GNU C Library – Introduction". gnu.org. Retrieved 2013-12-05.
  3. "Difference between C standard library and C POSIX library". stackoverflow.com. 2012. Retrieved 2015-03-04.
  4. "C Standards". C: C Standards (in English). Keil. Retrieved 24 November 2011.{{cite web}}: CS1 maint: url-status (link)
  5. "Re: Does Newlib support mmu-less CPUs?". Cygwin.com. 23 March 2006. Archived from the original on 22 November 2008. Retrieved 28 October 2011.
  6. "musl libc". Etalabs.net. Retrieved 28 October 2011.
  7. Other built-in functions provided by GCC, GCC Manual
  8. "Compiling with cc". Retrieved 2013-03-02.
  9. Weimer, Florian. "c - What functions is the libm intended for?". Stack Overflow. Retrieved 24 February 2021.
  10. "c99 - compile standard C programs". The Open Group Base Specifications Issue 7, 2018 edition. The Open Group. Retrieved 24 February 2021.
  11. "musl FAQ". www.musl-libc.org. Retrieved 24 February 2021.
  12. "ISO/IEC TR 24731-1: Extensions to the C Library, Part I: Bounds-checking interfaces" (PDF). open-std.org. 2007-03-28. Retrieved 2014-03-13.
  13. "ISO/IEC WDTR 24731-2: Extensions to the C Library, Part II: Dynamic Allocation Functions" (PDF). open-std.org. 2008-08-10. Retrieved 2014-03-13.
  14. Do you use the TR 24731 'safe' functions in your C code? - Stack overflow
  15. "Austin Group Review of ISO/IEC WDTR 24731". Retrieved 28 October 2011.
  16. "math_error - detecting errors from mathematical functions". man7.org. 2008-08-11. Retrieved 2014-03-13.
  17. "tree". Man.freebsd.org. 2007-12-27. Retrieved 2013-08-25.
  18. "Super User's BSD Cross Reference: /OpenBSD/sys/sys/tree.h". bxr.su.
  19. "queue". Man.freebsd.org. 2011-05-13. Retrieved 2013-08-25.
  20. "Super User's BSD Cross Reference: /OpenBSD/sys/sys/queue.h". bxr.su.
  21. "fgetln". Man.freebsd.org. 1994-04-19. Retrieved 2013-08-25.
  22. "Super User's BSD Cross Reference: /OpenBSD/lib/libc/stdio/fgetln.c". bxr.su.
  23. "Super User's BSD Cross Reference: /OpenBSD/include/stdio.h". bxr.su.
  24. "फीट". Man.freebsd.org. 2012-03-18. Retrieved 2013-08-25.
  25. "Super User's BSD Cross Reference: /OpenBSD/include/fts.h". bxr.su.
  26. "डाटाबेस". Man.freebsd.org. 2010-09-10. Retrieved 2013-08-25.
  27. "Super User's BSD Cross Reference: /OpenBSD/include/db.h". bxr.su.
  28. Miller, Todd C. and Theo de Raadt. strlcpy and strlcat - consistent, safe, string copy and concatenation. Proceedings of the 1999 USENIX Annual Technical Conference, June 6–11, 1999, pp. 175–178.
  29. "Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcat.c". bxr.su.
  30. "Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strlcpy.c". bxr.su.
  31. "Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncat.c". bxr.su.
  32. "Super User's BSD Cross Reference: /OpenBSD/lib/libc/string/strncpy.c". bxr.su.
  33. होना "ग़लती होना". Man.freebsd.org. 2012-03-29. Retrieved 2013-08-25. {{cite web}}: Check |url= value (help)
  34. "Super User's BSD Cross Reference: /OpenBSD/include/err.h". bxr.su.
  35. "vis(3)". Man.FreeBSD.org. Retrieved 14 September 2013.
  36. "Super User's BSD Cross Reference: /OpenBSD/lib/libc/gen/vis.c". bxr.su.
  37. "Super User's BSD Cross Reference: /OpenBSD/include/vis.h". bxr.su.
  38. "The Python Standard Library: 6.9. File Objects". Docs.python.org. Retrieved 28 October 2011.
  39. "libc". Rust Crates. Archived from the original on 18 August 2016. Retrieved 31 July 2016.


अग्रिम पठन


बाहरी संबंध