C में बाहर निकलने (0) और बाहर निकलने (1) के बीच क्या अंतर है?


96

क्या कोई मुझे बता सकता है? C भाषा में exit(0)और क्या अंतर exit(1)है?

जवाबों:


117

C भाषा में exit(0)और क्या अंतर exit(1)है?

exit(0)सफल कार्यक्रम समाप्ति को इंगित करता है और यह पूरी तरह से पोर्टेबल है, जबकि
exit(1)(आमतौर पर) असुरक्षित समाप्ति को इंगित करता है। हालाँकि, यह उपयोग गैर-पोर्टेबल है।

ध्यान दें कि C मानक परिभाषित करता है EXIT_SUCCESSऔर EXIT_FAILUREC प्रोग्राम से समाप्ति की स्थिति वापस करता है।

0और EXIT_SUCCESSसफल समाप्ति को इंगित करने के लिए मानक द्वारा निर्दिष्ट मान हैं, हालांकि, केवल EXIT_FAILUREअसुरक्षित समाप्ति पर लौटने के लिए मानक मान है। 1हालांकि कई कार्यान्वयनों में इसका उपयोग किया जाता है।


संदर्भ:

C99 मानक: 7.20.4.3 exitफ़ंक्शन
पैरा 5

अंत में, नियंत्रण मेजबान वातावरण में वापस आ जाता है। यदि स्थिति का मूल्य शून्य है या EXIT_SUCCESS, स्थिति के सफल समापन के कार्यान्वयन-डे of एनईडी रूप को वापस कर दिया जाता है। यदि स्थिति का मान है EXIT_FAILURE, तो स्थिति के असफल-समाप्ति के कार्यान्वयन-डे of ned प्रपत्र को लौटा दिया जाता है। अन्यथा दी गई स्थिति कार्यान्वयन-डे status ned है।


1
क्या आप गैर-पोर्टेबिलिटी की व्याख्या कर सकते हैं? विशेष रूप से, नॉनज़ेरो एग्ज़िट कोड विभिन्न विफलता मोड्स का संकेत देते हैं। किसी एप्लिकेशन के लिए आगे की जानकारी देने के लिए इसका उपयोग करना सामान्य है। एक एकल स्थिरांक ( EXIT_FAILURE) इस प्रकार अपर्याप्त है।
कोनराड रुडोल्फ

@KonradRudolph: मैंने प्रासंगिक उद्धरण जोड़ा। उम्मीद है की वो मदद करदे।
आलोक सेव

1
@ मोती: पोसिक्स एक मानक है। सी मानक कहते हैं, "कार्यान्वयन से परिभाषित" लेकिन यह है कि "पोर्टेबल नहीं" कह के बराबर नहीं है, जब वास्तव में कार्यान्वयन कर सम्मेलन पर सहमत हैं।
कैट प्लस प्लस

1
@PeterM: मुझे एक ऐसा मंच खोजें जो इस सम्मेलन का उपयोग नहीं करता है। यह कुछ विशेष / एम्बेडेड / फ्रीस्टैंडिंग / जो कुछ भी पर्यावरण, जहां पोर्टेबिलिटी का होने की संभावना है exitअपनी चिंताओं के कम से कम है (नरक, वहाँ भी नहीं हो सकता है हो सकता है एक सी पुस्तकालय उपलब्ध वहाँ। कुछ भी पोर्टेबल है !!! 111)।
कैट प्लस प्लस

3
@CatPlusPlus: OpenVMS पर, exitकिसी भी विषम मान के साथ कॉल करना सफलता को दर्शाता है। exit(0)सी अनुरूपता के लिए एक विशेष मामले के रूप में माना जाता है। हां, POSIX एक मानक है, लेकिन सभी सिस्टम इसके अनुरूप नहीं हैं। यदि आप कोड लिखना चाहते हैं जो POSIX को मानता है, तो आप ऐसा करने के लिए स्वतंत्र हैं, लेकिन यह आपके कोड की पोर्टेबिलिटी को सीमित करता है।
कीथ थॉम्पसन

12

exit सी भाषा में एक एक्ज़िट स्टेटस का प्रतिनिधित्व करने वाला पूर्णांक लेता है।

सफलता से बाहर निकलें

आमतौर पर, 0 से बाहर निकलने की स्थिति को एक सफलता माना जाता है, या प्रोग्राम के सफल निष्पादन के कारण जानबूझकर बाहर निकलना।

विफलता से बाहर निकलें

1 से बाहर निकलने की स्थिति को विफलता माना जाता है, और आमतौर पर इसका मतलब है कि कार्यक्रम को किसी कारण से बाहर निकलना पड़ा, और सामान्य कार्यक्रम प्रवाह में सफलतापूर्वक सब कुछ पूरा करने में सक्षम नहीं था।

यहाँ एक GNU संसाधन बाहर निकलने की स्थिति के बारे में बात कर रहा है।


जैसा कि @Als ने कहा है, 0 और 1 के स्थान पर दो स्थिरांक का उपयोग किया जाना चाहिए।

EXIT_SUCCESS मानक शून्य द्वारा परिभाषित किया गया है।

EXIT_FAILURE एक होने के लिए मानक द्वारा प्रतिबंधित नहीं है, लेकिन कई सिस्टम इसे एक के रूप में लागू करते हैं।


9

exit(0)इंगित करता है कि कार्यक्रम त्रुटियों के बिना समाप्त हो गया। exit(1)इंगित करता है कि कोई त्रुटि थी।

आप 1विभिन्न प्रकार की त्रुटियों के बीच अंतर करने के अलावा अन्य मूल्यों का उपयोग कर सकते हैं।


3

अंतर यह है कि पर्यावरण में लौटाया गया मूल्य 0पूर्व के मामले 1में और बाद के मामले में है:

$ ./prog_with_exit_0
$ echo $?
0
$

तथा

$ ./prog_with_exit_1
$ echo $?
1
$

यह भी ध्यान रखें कि मैक्रो मूल्य EXIT_SUCCESSऔर EXIT_FAILUREकरने के लिए एक तर्क के रूप में इस्तेमाल किया exitसमारोह कार्यान्वयन परिभाषित कर रहे हैं लेकिन आम तौर पर क्रमशः की तैयारी में हैं 0और एक गैर शून्य संख्या। (POSIX EXIT_SUCCESS0 होना आवश्यक है)। तो आमतौर पर exit(0)एक सफलता और exit(1)विफलता का मतलब है ।

exitफ़ंक्शन में एक तर्क के साथ एक फ़ंक्शन कॉल उसी तर्क के साथ mainकथन के बराबर है return


2

एग्जिट एक सिस्टम कॉल है जिसका उपयोग रनिंग प्रक्रिया को पूरा करने के लिए किया जाता है, जहाँ से इसे कॉल किया जाता है। बाहर निकलने के पैरामीटर का उपयोग माता-पिता को बाल प्रक्रिया की स्थिति के बारे में सूचित करने के लिए किया जाता है। तो, एक प्रक्रिया के सफल निष्पादन और त्रुटि को चिह्नित करने के लिए (1) से बाहर निकलने के संकेत के लिए (0 और अक्सर इस्तेमाल किया जा सकता है) से बाहर निकलें (और अक्सर उपयोग किया जाता है)। संदर्भ लिंक


1

exit(0)की तरह व्यवहार return 0में main()समारोह, exit(1)की तरह व्यवहार return 1। मानक, वह mainफ़ंक्शन है return 0, यदि प्रोग्राम सफलतापूर्वक समाप्त हो गया है जबकि गैर-शून्य मान का अर्थ है कि प्रोग्राम को किसी प्रकार की त्रुटि के साथ समाप्त कर दिया गया था।


1

बाहर निकलें (0) बाहर निकलने के बराबर है (EXIT_SUCCESS)।

बाहर निकलें (1) बाहर निकलने के बराबर है (EXIT_FAILURE)।

असफलता पर, कोई भी सकारात्मक मूल्य प्रक्रिया से बाहर निकलने के लिए वापस आ जाता है, जिसे आप $ का उपयोग करके शेल पर पा सकते हैं।

128 से अधिक मूल्य जो सिग्नल द्वारा समाप्ति का कारण बनता है। इसलिए यदि सिग्नल द्वारा समाप्त किए गए किसी भी शेल कमांड को रिटर्न स्टेटस (128 + सिग्नल नंबर) होना चाहिए।

उदाहरण के लिए:

यदि कोई शेल कमांड SIGINT द्वारा समाप्त किया जाता है तो $? 130 देगा (128 + 2) (यहां 2 सिगंइट के लिए सिग्नल नंबर है, किल-एल का उपयोग करके जांचें)


0

जब निष्पादन योग्य समाप्त हो जाता है (बाहर निकलता है) तो यह उस मान का मान लौटाता है जो इसे चलाता है। exit(0)आमतौर पर संकेत मिलता है कि सब ठीक है, जबकि exit(1)संकेत मिलता है कि कुछ गलत हो गया है।



0

exit(0) कार्यक्रम का मतलब है (प्रक्रिया) सामान्य रूप से सफलतापूर्वक समाप्त ..

exit(1) कार्यक्रम का मतलब है (प्रक्रिया) सामान्य रूप से असफल ..

यदि आप इस चीज़ का निरीक्षण करना चाहते हैं, तो आपको यूनिक्स में सिग्नल हैंडलिंग और प्रक्रिया प्रबंधन का पता होना चाहिए ...

के बारे में पता है sigaction, watipid().. के लिए () ... ऐसे .... एपीआई ...........


0

exit function। C प्रोग्रामिंग लैंग्वेज में, एग्जिट फंक्शन एक्जिट में पंजीकृत सभी फंक्शन को कॉल करता है और प्रोग्राम को समाप्त कर देता है।

exit(1)मतलब प्रोग्राम (प्रक्रिया) असफलता को समाप्त करता है। फ़ाइल बफ़र्स फ्लश किए जाते हैं, स्ट्रीम बंद हो जाती हैं, और अस्थायी फ़ाइलें हटा दी जाती हैं

exit(0) मतलब प्रोग्राम (प्रोसेस) सफलतापूर्वक समाप्त हो गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.