2009-10-10 10 views
35

क्या यूनिक्स में इन्टनो को इसके संबंधित स्ट्रिंग में कनवर्ट करने के लिए कोई फ़ंक्शन है उदा। ईआईडीआरएम "ईआईडीआरएम" के लिए। इन पूर्णांक त्रुटियों के साथ त्रुटियों की जांच करने के लिए डीबग करना बहुत परेशान है।यूनिक्स में गलत स्ट्रिंग को कैसे परिवर्तित करें?

उत्तर

62

strerror() इसे करना चाहिए। http://linux.die.net/man/3/strerror

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

+1

स्ट्राइर वास्तव में ओप के रूप में "ईआईडीआरएम" की तुलना में उन्हें अधिक उपयोगी तारों में बदल देगा, लेकिन यही वह जवाब है जो मैंने दिया होगा। –

+1

वे तार वास्तव में उपयोगी नहीं हैं, क्योंकि सिस्टम कॉल के लिए मैन पेज अक्सर एनम कोड के संदर्भ में त्रुटि व्यवहार निर्दिष्ट करते हैं। स्ट्रिंग सबसे अच्छा संकेत है। – orm

+0

खतरे, विल रॉबिन्सन! 'strerror()' के स्ट्रिंग _localised_ हैं, जैसा कि मैंने पाया कि जब मैं "ऐसी कोई फ़ाइल या निर्देशिका नहीं" के लिए त्रुटि स्ट्रिंग की जांच कर रहा था, लेकिन मेरे उपयोगकर्ता का प्लेटफ़ॉर्म "आर्किविओ कहां diretório não encontrado" लौटा रहा था। (यह ऐसी भाषा में था जहां इरनो मूल्य स्वयं प्रकट नहीं हुआ था।) –

4

मैं ऐसे enum शैली नाम के बारे में यकीन नहीं है, लेकिन डिबगिंग और त्रुटि रिपोर्टिंग प्रयोजनों के लिए आप perror(3) या strerror(3) सी कार्यों कि त्रुटि कोड की एक मानव पठनीय प्रतिनिधित्व वापसी कर सकते हैं। अधिक जानकारी के लिए कृपया मैन पेज देखें।

+0

मैंने सोचा था कि पेरर() सिर्फ संख्या को एक मूल्य में बदलने के बजाय STDERR को प्रिंट करता है। क्या मैं गलत मानता हूं (और मैन पेज को गलत तरीके से पढ़ता हूं)? – atk

+0

हां, 'perror'' errno' से संबंधित मुद्दों के लिए एक डिबगिंग सुविधा है और यह अपने संदेश 'STDERR' को लिखता है। –

10

बस एक और समाधान है कि वास्तव में समस्या आप को हल करती है, सी के बजाय अजगर में लेकिन:

>>> import errno 
>>> errno.errorcode[errno.EIDRM] 
'EIDRM' 
3

आप वास्तव में ऐसा करते हैं तो चाहते EIDRM और नहीं अपनी त्रुटि स्ट्रिंग: कोई। हालांकि, OpenBSD पर,

man errno|egrep ' [0-9]+ E[A-Z]+'|sed 's/^ *//'|cut -d' ' -f1,2 

प्रिंट बाहर का एक अच्छा तालिका "... \ n89 EIDM \ N ..." है कि आप प्रोग्रामिंग भाषा है कि आप करना चाहते हैं के लिए एक डेटा संरचना में आगे परिवर्तित कर सकते हैं इस समारोह में

5

अब और अधिक उपयोगिता पैकेज के साथ वितरित एक त्रुटि उपयोगिता है।

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