2012-02-21 21 views
51

के बीच अंतर मैं "सी मानक lib" और "सी POSIX lib" द्वारा थोड़ा उलझन में हूं, क्योंकि मुझे पता चला है कि "सी POSIX lib" में परिभाषित कई शीर्षलेख फ़ाइलें भी हैं "सी मानक lib"।सी मानक लाइब्रेरी और सी POSIX लाइब्रेरी

तो, मुझे लगता है कि, "सी मानक lib" एएनएसआई सी संगठन द्वारा परिभाषित एक lib है, और विभिन्न प्लेटफार्मों (Win32/यूनिक्स-जैसी) पर विभिन्न कार्यान्वयन हैं, और "सी POSIX lib" केवल एक कार्यान्वयन है यूनिक्स जैसी ओएस पर "सी मानक lib" के लिए, है ना?

लेकिन "सी पॉज़िक्स lib" में कुछ शीर्षलेख शामिल हैं जो "सी मानक lib" में निर्दिष्ट नहीं हैं, जैसे <sys/types.h>, <sys/wait.h>, और <pthread.h>

एक उदाहरण के रूप <pthread.h> ले लो, मुझे लगता है अपने 'सी मानक lib "समकक्ष <threads.h> है, तो अगर मैं लिनक्स पर एक मल्टी-थ्रेडेड कार्यक्रम है, जो हेडर फाइल मैं शामिल होना चाहिए, <pthread.h> या <threads.h> लिखना चाहते हैं?

+5

एएनएसआई सी 1990, जब सी एक अंतरराष्ट्रीय मानक बन गया के बाद से अप्रचलित हो गया है। तब से, सी को एक [आईएसओ कार्यकारी समूह] (http://www.open-std.org/jtc1/sc22/wg14/) द्वारा बनाए रखा जाता है। – Lundin

+4

@ लंदन पूरी तरह बकवास। एएनएसआई सी अप्रचलित लेकिन कुछ भी नहीं है। वास्तव में सी 11 को आईएनआईटीएस द्वारा एक एएनएसआई मानक के रूप में जाना जाता था जिसे [INCITS/आईएसओ/आईईसी 98 99-2012] (http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012) कहा जाता है। जो नया एएनएसआई सी मानक है। – Wiz

+0

@Wiz यह एक अंतरराष्ट्रीय मानक है और यह एक अंतरराष्ट्रीय साइट है। इस बात को ध्यान में रखते हुए, 1 99 0 से एएनएसआई सी के बारे में बात करने का कोई मतलब नहीं है। ऐसा ही है जैसे मैं इस साइट पर "एसएस सी" के रूप में सी का जिक्र करना शुरू कर दूंगा, क्योंकि मैं स्वीडन और स्वीडिश मानक से हूं एसएस/आईएसओ/आईईसी 98 99 कहा जाता है। – Lundin

उत्तर

36

POSIX मानक सी लाइब्रेरी का एक सुपरसेट है, और यह ध्यान रखना महत्वपूर्ण है कि यह इसे रोकता है। यदि सी और पॉज़िक्स कभी संघर्ष में है, सी जीतता है।

सॉकेट, फ़ाइल डिस्क्रिप्टर, साझा स्मृति इत्यादि POSIX का हिस्सा हैं, लेकिन सी लाइब्रेरी में मौजूद नहीं हैं।

pthread.h पॉज़िक्स धागे के लिए उपयोग किया जाता है और threads.h सी 11 के लिए एक नया शीर्षलेख है और सी लाइब्रेरी का हिस्सा है। शायद भविष्य में कभी भी सी के पक्ष में भविष्य में pthreads को हटा दिया जाएगा, हालांकि आप शायद सी 11 पर भरोसा नहीं कर सकते हैं ताकि व्यापक रूप से व्यापक तैनाती हो सके। इसलिए यदि आप पोर्टेबिलिटी चाहते हैं तो आपको अभी के लिए पर्थ्रेड पसंद करना चाहिए। यदि पोर्टेबिलिटी चिंता का विषय नहीं है, और आपके पास सी 11 थ्रेड उपलब्ध हैं, तो आपको शायद उन लोगों का उपयोग करना चाहिए।

+0

उदाहरण के लिए, सिग्नल.h दोनों का उल्लेख http://en.wikipedia.org/wiki/C_standard_library और http://en.wikipedia.org/wiki/C_POSIX_library में किया गया है। लेकिन मुझे अभी भी समझ में नहीं आता है। सिग्नल.h मानक सी लाइब्रेरी का हेडर है, या यह केवल पॉज़िक्स सिस्टम में उपलब्ध है? –

+1

@ कोरेतुगे इसे समझने का सबसे अच्छा तरीका है [POSIX वेबपृष्ठ] (http://pubs.opengroup.org/onlinepubs/9699919799) पर जाने के लिए आईएमओ और [signal.h] (http: // pubs। opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html)। यह ध्यान देगा कि हेडर सी मानक लाइब्रेरी में मौजूद है लेकिन वह POSIX इसे विस्तारित करता है। एक्सटेंशन 'सीएक्स' के साथ चिह्नित हैं। यह कहता है कि आपको एक परिभाषा जोड़नी है, लेकिन आमतौर पर एक्सटेंशन डिफ़ॉल्ट कंपाइलर झंडे द्वारा सक्षम होते हैं। एक और विकल्प [सी मानक] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) को पढ़ना है। –

+0

मुझे नहीं लगता कि सी 11 धागे के पक्ष में pthreads को बहिष्कृत किया जा रहा है, खासकर जब से सी 11 धागे (एक महत्वहीन विस्तार को छोड़कर) pthreads का एक उचित सबसेट है। – fuz

9

सी POSIX लाइब्रेरी POSIX सिस्टम के लिए सी मानक लाइब्रेरी का एक विनिर्देश है। यह एएनएसआई सी मानक के साथ ही विकसित किया गया था। मानक सी के साथ POSIX संगत बनाने के लिए कुछ प्रयास किए गए थे; POSIX में मानक सी

3

POSIX 7 बोली

http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap01.html#tag_14_01

1,1 अन्य औपचारिक मानक रिश्ता

बहुत ध्यान यह सुनिश्चित करें कि POSIX.1-2008 की इस मात्रा पूरी तरह से के साथ गठबंधन किया है लिया गया है निम्नलिखित मानकों:

आईएसओ सी (1 999) आईएसओ/आईईसी 98 99: 1 999, प्रोग्रामम आईएनजी भाषाएं - सी, आईएसओ/आईईसी 98 99: 1 999/कोर .1: 2001 (ई), आईएसओ/आईईसी 98 99: 1 999/कोर 2: 2004 (ई), और आईएसओ/आईईसी 98 99: 1 999/कोर 3।

आईएसओ/आईईसी 98 99: 1 999 मानक (बाद में आईएसओ सी मानक के रूप में संदर्भित) के हिस्सों को संदर्भित करने के लिए संदर्भित किया गया है जो POSIX.1-2008 की इस मात्रा द्वारा अनिवार्य है। POSIX.1-2008 की इस मात्रा के भीतर शामिल कुछ फ़ंक्शंस और शीर्षलेखों में आईएसओ सी मानक में एक संस्करण है; इस मामले में सीएक्स चिह्नों को यह दिखाने के लिए उपयुक्त कहा जाता है कि आईएसओ सी मानक बढ़ाया गया है (कोड देखें)। POSIX.1-2008 और आईएसओ सी मानक की इस मात्रा के बीच कोई भी संघर्ष अनजान है।

मैं कुछ प्रमुख एपीआई एक्सटेंशन सूचीबद्ध किया है: I never really understood: what is POSIX?

संबंधित मुद्दे