2009-07-12 11 views
7

किताब "सी प्रोग्रामिंग भाषा" यह कहते हैं:।।मैं इरनो के साथ बातचीत करने वाले कार्यों की सूची कहां देख सकता हूं?

"पुस्तकालय सेट स्थिति संकेतकों में कार्यों में से कई लोग जब त्रुटि या फ़ाइल के अंत होते हैं ये संकेतक की स्थापना की और स्पष्ट रूप से परीक्षण किया जा सकता में इसके अलावा, पूर्णांक अभिव्यक्ति errno (घोषित <errno.h> में) में एक त्रुटि संख्या हो सकती है जो सबसे अधिक हाल की त्रुटि के बारे में और जानकारी देती है। "

मैं इन कार्यों की एक सूची कहां देख सकता हूं?

+0

@Leif, कूल कि आप के एंड आर के माध्यम से काम कर रहे हैं। मैंने अपनी छुट्टियों के दौरान बस कुछ दिनों के लिए ऐसा करना समाप्त कर दिया। (-: –

उत्तर

6

मानक का कहना है इस बारे में errno:

errno का मान शून्य कार्यक्रम स्टार्टअप पर है, लेकिन किसी भी पुस्तकालय समारोह से शून्य पर सेट कभी नहीं किया गया है। इरनो का मान किसी लाइब्रेरी फ़ंक्शन कॉल द्वारा nonzero पर सेट किया जा सकता है चाहे कोई त्रुटि हो या नहीं, बशर्ते इरनो का उपयोग इस अंतर्राष्ट्रीय मानक में फ़ंक्शन के विवरण में दस्तावेज न हो।

कौन सा मेरे लिए कहा गया है कि किसी भी पुस्तकालय समारोह किसी भी तरह से यह सिवाय पसंद करती है में errno के साथ चारों ओर पेंच कर सकते हैं:

  • यह निर्धारित नहीं कर सकते errno0
  • करने के लिए इसे यह क्या नहीं कर सकते पसंद करती है, तो मानक रूप से अन्यथा कहते हैं

ध्यान दें कि मानक एक फुटनोट में निम्नलिखित पता चलता है:

+०१२३५१६४१०६१

इस प्रकार, एक प्रोग्राम जो त्रुटि जांच के लिए errno का उपयोग करता है उसे लाइब्रेरी फ़ंक्शन कॉल से पहले शून्य पर सेट करना चाहिए, उसके बाद इसे बाद के लाइब्रेरी फ़ंक्शन कॉल से पहले निरीक्षण करें। बेशक, एक लाइब्रेरी फ़ंक्शन एंट्री पर errno के मान को सहेज सकता है और फिर इसे शून्य पर सेट कर सकता है, जब तक कि मूल मान बहाल हो जाए, यदि errno का मान अभी भी वापसी से पहले शून्य है।

अन्य उत्तर में बताया गया है, यह काम करता है कि errno स्थापित करने के लिए और साथ ही मानक में नहीं हैं के लिए आम बात है।

5

आपको यह मानना ​​चाहिए कि कोई भी फ़ंक्शन मानक लाइब्रेरी में नहीं, बल्कि इरनो सेट कर सकता है। इसलिए एक सूची थोड़ा व्यर्थ होगा।

+0

मैं असहमत हूं, हालांकि जीवन निश्चित रूप से आपके तरीके से आसान होगा! मैं वर्तमान में कुछ एम्बेडेड पुस्तकालयों के साथ संघर्ष कर रहा हूं जो "एक त्रुटि हुई: errno = 0" जैसे संदेश लौटाते हैं तो ओपी सूचित करता है, अगर आप क्षमा करेंगे आपके नाम पर अनूठा पन, यह उन कार्यों को फ़िल्टर करने में सक्षम होना उपयोगी होगा जो सहायक मूल्यों में इरनो सेट नहीं करते हैं। –

+1

@Adam क्या पंस होगा? मुझे लगता है कि मुझे कुछ स्पष्ट और अशिष्ट याद आ रहा है? –

+0

प्रश्न किसी भी फ़ंक्शन के बारे में नहीं था - यह मानक लाइब्रेरी में उन लोगों के बारे में था। मानक दस्तावेज लाइब्रेरी में कार्य करता है जो इरनो को संशोधित करता है। व्यर्थ बात यह है कि इन्टनो को संशोधित नहीं करने के लिए फ़ंक्शन का इलाज किया जाता है जैसे कि वे हो सकते हैं। – Dingo

0

एक उचित सवाल यह हो सकता है कि errno मूल्य क्या हो सकते हैं और उनमें से प्रत्येक का क्या अर्थ हो सकता है। आप उन्हें intro(2) में सूचीबद्ध देख सकते हैं।

-1

errno कीवर्ड वाली फ़ाइलों की खोज के लिए आप अपने पसंदीदा संपादक और "फ़ाइलों में खोजें ..." का उपयोग कर सकते हैं।

+0

और बोल्ड फोंट डिस्क पर और अधिक जगह लेते हैं? –

+0

मैं आपको समझ नहीं पा रहा हूं। वैसे भी, मैं लाइब्रेरी फाइलों (* .c, * .cpp) को खोजने के लिए था। –

1

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

+0

क्या वास्तव में एक POSIX कार्यान्वयन है जिसमें थ्रेड हैं लेकिन इसमें थ्रेड-स्थानीय त्रुटि नहीं है? – bk1e

+0

'errno' थ्रेड-विशिष्ट होने के लिए निर्दिष्ट है। -1 इस मामले पर गलत जानकारी के लिए। –

+0

मैंने कभी नहीं कहा कि errno थ्रेड विशिष्ट नहीं है। थ्रेडिंग फ़ंक्शंस वैसे भी गलत सेट नहीं करते हैं। – codymanix

1

@ एडम, जैसा कि नील ने कहा, किसी भी फ़ंक्शन को errno.h के विरुद्ध संकलित किया जा सकता है और इरनो सेट किया जा सकता है। यह परिभाषा के अनुसार है, कोर इरनो कार्यक्षमता का उपयोग करने के लिए इस तरह से संकलित सभी उपयोगिताओं को सूचीबद्ध करना असंभव है।

उस ने कहा, कई तरीकों से उपयोगकर्ता को त्रुटियों की सूचना दी जा सकती है। इरनो का उपयोग करना सिर्फ एक है।

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

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