"निकास (-1)" कहां से आया था?


22

मैं इंटरनेट का उपयोग करना चाहिये कि पर विरासत सॉफ्टवेयर और बुरे ट्यूटोरियल का एक बहुत में देखते हैं exit(-1), return -1या इसी तरह के "असामान्य समाप्ति" का प्रतिनिधित्व करने के लिए। समस्या यह है कि, POSIX में कम से कम, -1कभी नहीं रहा है और एक मान्य स्थिति कोड नहीं है। man 3 exitकि दिखाता exit()रिटर्न के मूल्य status & 0377माता-पिता के लिए, जिसका अर्थ है कि -1हो जाता है 255EXIT_FAILUREपोर्टेबिलिटी के लिए नॉन-पॉसिक्स सिस्टम पर सिफारिश की जाती है। लेकिन "EXIT_FAILURE 1 के अलावा कुछ और हो सकता है" के साथ संयोजन के रूप में "-1 का मतलब असामान्य समाप्ति" नहीं है, यह दर्शाता है कि वे स्पष्ट रूप से मानते हैं कि "-1" गैर-पॉसिक्स सिस्टम पर भी पारंपरिक है।

यहां एक StackOverflow प्रश्न का उदाहरण दिया गया है जो इसे समाप्त करता है । सॉफ्टवेयर "अवास्तविक" भी एक प्रोग्राम का एक उदाहरण है जो प्रोग्राम exit(-1)को समाप्त करने के लिए उपयोग करता है। व्यवहार में, इससे इंटरफ़ेस करना मुश्किल हो जाता है systemd

यह विरोधी पैटर्न कहां से आया? क्या यह किसी संदर्भ में मान्य है?


1
"यूनिक्स जैसी प्रणालियों में एक मजबूत सम्मेलन होता है जो 0 से बाहर निकलने की स्थिति सफलता को दर्शाता है, और कोई भी गैर-शून्य निकास स्थिति विफलता को दर्शाता है ... यह सम्मेलन यूनिक्स के गोले में बहुत कठिन है ..." ( गैर-शून्य निकास स्थिति स्वच्छ निकास के लिए )
gnat

@gnat libc मैनुअल के अनुसार निकास स्थिति स्पष्ट रूप से 0 से 255 समावेशी है। अगर वहाँ कहीं एक उत्तर है जो बताता है कि नकारात्मक मान एक बिंदु पर मान्य थे, तो मैं इसे स्वीकार करूंगा, लेकिन मुझे लगता है कि अत्यधिक संदिग्ध।
user222973

1
@gnat "255" आसानी से एक में फिट बैठता है unsigned char
user222973


1
@gnat "Java" में एक बाइट एक अहस्ताक्षरित चार नहीं है, यह तब से अधिक बराबर है charक्योंकि इसके मूल्यों की सीमा -128 से 127 है। आगे, मैंने पहले ही कहा "-1" मेरे प्रश्न शरीर में "255" में परिवर्तित हो जाता है। ।
user222973

जवाबों:


20

लगभग सभी यूनिक्स कंप्यूटर पूर्णांक के लिए दो-पूरक का उपयोग करते हैं, और दो-पूरक में हमेशा शब्द आकार की परवाह किए बिना "सभी बिट्स 1" होता है। यदि आप कार्यक्रम के बाहर निकलने की स्थिति के आकार की परवाह किए बिना सबसे बड़ा संभव निकास कोड चाहते हैं, तो -1 का उपयोग करके और पुस्तकालय को आसानी से छंटनी करने दें।

यह उपयोगी है क्योंकि जब स्क्रिप्ट या प्रोग्राम में एक से अधिक संभव निकास स्थिति होती है ( grepएक साधारण उदाहरण के लिए देखें ) सार्थक लोगों को आमतौर पर सबसे छोटी संख्याओं को सौंपा जाता है, जिससे "अज्ञात त्रुटि" या "का उपयोग करने के लिए सबसे बड़ा संभव निकास कोड एक अच्छा हो जाता है" गर्भपात "क्योंकि यह सार्थक स्थिति मूल्य के साथ कभी भी संघर्ष की संभावना नहीं है।


एक उदाहरण के रूप में ग्लिबक को लें, जो के exit()रूप में लागू होता है status &= 0xff। क्या कोई "शब्द आकार" है जिसमें -1 & 0xff255 नहीं है? बेशक नहीं, क्योंकि पूरा उद्देश्य इसे 0-255 की सीमा में फिट करना है। भले ही, आपका अंतिम वाक्य समझ में न आए: स्थिति कोड 128-255 का UNIX सिस्टम में विशेष उद्देश्य है।
user222973

2
प्रोग्राम एक्जिट वैल्यू के साथ बैश एग्जिट वैल्यू (जो कि 0-127, 128+ स्पेशल बैश वैल्यू हैं) को भ्रमित न करें (जो कि 0-255 हैं, pubs.opengroup.org/onlinepubs/009695399/functions/exit.html देखें )। आकार के रूप में, याद रखें कि सी प्रोग्रामर शुरू से ही कई शब्द आकार (मूल रूप से 12, 16 और 32 बिट्स) के साथ काम कर रहे हैं, इसलिए हम स्वचालित रूप से उन मुहावरों के लिए प्रयास करते हैं जो हमें शब्द आकार पर विचार करने की आवश्यकता नहीं है। चूंकि यूनिक्स ने 2 दशक पहले पॉज़िक्स की भविष्यवाणी की, इसलिए हमेशा 8-बिट सीमा नहीं थी इसलिए हमने लिखा था इसलिए यह कोई फर्क नहीं पड़ा।
टॉड नायर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.