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