हर सिस्टम कॉल जो विफल रहता है errno
मान को अपडेट करता है ।
इस प्रकार, आपके पास इस बारे में अधिक जानकारी हो सकती है कि जब किसी ifstream
चीज़ का उपयोग करके एक ओपन फेल होता है, तो क्या होता है :
cerr << "Error: " << strerror(errno);
हालाँकि, चूंकि प्रत्येक सिस्टम कॉल वैश्विक errno
मूल्य को अपडेट करता है , इसलिए आपके पास एक मल्टीथ्रेडेड एप्लिकेशन में समस्याएँ हो सकती हैं, यदि किसी अन्य सिस्टम कॉल के निष्पादन f.open
और उपयोग के बीच कोई त्रुटि हो errno
।
POSIX मानक के साथ सिस्टम पर:
इरनो थ्रेड-लोकल है; इसे एक धागे में सेट करने से किसी अन्य धागे में इसका मूल्य प्रभावित नहीं होता है।
संपादित करें (टिप्पणी में Arne Mertz और अन्य लोगों के लिए धन्यवाद):
e.what()
ऐसा लगता है कि इसे लागू करने का पहला सी + + - मुहावरेदार तरीका है, हालांकि इस फ़ंक्शन द्वारा लौटाए गए स्ट्रिंग कार्यान्वयन-निर्भर हैं और (कम से कम G ++ के libstdc ++ में) इस स्ट्रिंग में त्रुटि के पीछे के कारण के बारे में कोई उपयोगी जानकारी नहीं है ...