2009-10-08 19 views
8

क्या एप्लिकेशन रिटर्न कोड के मानक सेट के रूप में ऐसी कोई चीज है? विफलता के लिए सफलता 1 के लिए 0 लौटने जैसी चीजें, और फिर इतनी पर?क्या "मानक" आवेदन वापसी/निकास कोड एक आवेदन समर्थन चाहिए?

मेरे पास एक विंडोज सर्वर एप्लिकेशन है जिसमें मैं कुछ रिटर्न त्रुटि कोड जोड़ रहा हूं और ऐप विशिष्ट लोगों के अलावा मानक कोड से चिपकना चाहता हूं।

उत्तर

2

एक्जिट कोड के मानक सेट के रूप में ऐसी कोई चीज़ नहीं है जिसे अनुप्रयोगों के अनुरूप होना चाहिए।

हालांकि, जैसा कि आपने उल्लेख किया है, सफलता के लिए 0 जैसे कुछ आम हैं। आपके द्वारा उपयोग की जाने वाली ऑपरेटिंग सिस्टम और टूल के आधार पर, आप समान ऐप्स के लिए निकास कोड देख सकते हैं और उन्हें नकल कर सकते हैं।

+0

आपका लिंक टूटा हुआ है, और यह Google के कैश में नहीं है। (इसके अलावा, एचपी फोरम पर एक पोस्ट ऐसा प्रतीत नहीं होता है कि यह पहली जगह विशेष रूप से आधिकारिक संदर्भ होने की संभावना है।) –

14

मुझे लगता है कि सफलता के लिए एकमात्र मानक 0 और विफलता के लिए शून्य नहीं है। और यह एक मानक से अधिक एक सम्मेलन है।

4

निकास कोड मानक से बहुत दूर हैं, और डेवलपर के लिए आवेदन की वापसी पर होने वाली उचित त्रुटि को जानने के लिए अधिक उपयोग किया जाता है। सफलता के लिए 0 का मानक, विफलता के लिए गैर-शून्य एक सामान्य प्रवृत्ति है, और इसका उपयोग किया जाता है क्योंकि यह आपको सभी संभावित त्रुटियों के लिए पूर्ण गैर-शून्य सीमा का उपयोग करने देता है।

यदि आपका एप्लिकेशन त्रुटियों को उचित रूप से लॉग करता है, तो बाहर निकलने के लिए निकास कोड पूरी तरह से अनावश्यक होगा।

5

मानक स्थिति कोड EXIT_SUCCESS और EXIT_FAILURE है, जो stdlib.h में परिभाषित किया गया है। हालांकि, बहुत सारे लोग क्रमशः 0 और 1 का उपयोग करते हैं। कुछ सॉफ़्टवेयर विभिन्न प्रकार की त्रुटियों के लिए अलग-अलग गैर-शून्य कोड का उपयोग करेंगे।

-2

लागू करें कि आप क्या उपयोग करेंगे। कुछ भी अनावश्यक है।

7

शायद आप यूनिक्स सम्मेलनों में से कुछ को अपना सकते हैं।

another answer में, उपयोगकर्ता डेविड

sysexits.h मानक बाहर निकलने के कोड की एक सूची है का सुझाव दिया। ऐसा लगता है कि कम से कम 1 99 3 तक और पोस्टफिक्स जैसी कुछ बड़ी परियोजनाएं इसका उपयोग करती हैं, इसलिए मुझे लगता है कि यह जाने का तरीका है।

OpenBSD आदमी पृष्ठ से:

शैली के अनुसार (9), है ना (3) arbi- trary मूल्यों के साथ जब एक कार्यक्रम को समाप्त एक विफलता की स्थिति को इंगित करने के लिए बाहर निकलें कॉल करने के लिए अच्छा अभ्यास है। इन-स्टेड, सेक्सीट्स से पूर्व-निर्धारित निकास कोड का उपयोग किया जाना चाहिए, इसलिए प्रक्रिया के कॉलर को स्रोत कोड को देखे बिना विफलता वर्ग के बारे में कोई अनुमान नहीं हो सकता है।

#define EX_USAGE  64  /* command line usage error */ 
#define EX_DATAERR  65  /* data format error */ 
#define EX_NOINPUT  66  /* cannot open input */  
#define EX_NOUSER  67  /* addressee unknown */  
#define EX_NOHOST  68  /* host name unknown */ 
#define EX_UNAVAILABLE 69  /* service unavailable */ 
#define EX_SOFTWARE  70  /* internal software error */ 
#define EX_OSERR  71  /* system error (e.g., can't fork) */ 
#define EX_OSFILE  72  /* critical OS file missing */ 
#define EX_CANTCREAT 73  /* can't create (user) output file */ 
#define EX_IOERR  74  /* input/output error */ 
#define EX_TEMPFAIL  75  /* temp failure; user is invited to retry */ 
#define EX_PROTOCOL  76  /* remote error in protocol */ 
#define EX_NOPERM  77  /* permission denied */ 
#define EX_CONFIG  78  /* configuration error */ 

फ़ाइल /usr/include/sysexits.h एक के अंदर इन त्रुटि कोड की अधिक विस्तृत विवरण प्राप्त कर सकते हैं:

इस सूची के रूप में यह एक डेबियन प्रणाली पर दिखाई देता है।

+0

यही वह है जो मैं उपयोग करता हूं। – RedShift

0

निश्चित रूप से विंडोज के लिए निर्धारित मानक त्रुटि कोड हैं।

बहुत समय पहले हमने विशिष्ट 'कस्टम' त्रुटियों के लिए नकारात्मक त्रुटियों का उपयोग किया था, लेकिन मुझे संदेह है कि यह अच्छी प्रथा है।

System Error Codes (Windows)

+0

आपको प्रोग्राम सिस्टम निकास कोड के रूप में * सिस्टम त्रुटि कोड * का उपयोग करने की आवश्यकता नहीं है। जैसा कि यहां अन्य उत्तरों में उल्लेख किया गया है, यह विंडोज प्रोग्राम के लिए परंपरागत है * 1 * को कैच-ऑल एरर कोड के रूप में उपयोग करने के लिए; अगर हर कोई * सिस्टम त्रुटि कोड * का उपयोग कर रहा था, तो इसका मतलब हमेशा "गलत कार्य" होगा (और सामान्य अनिर्दिष्ट त्रुटि को इंगित करने के लिए कोई रास्ता नहीं होगा)। –

+0

यह सच है, आपको मानकों का पालन करने की आवश्यकता नहीं है। प्रश्न मानक के बारे में था, और यही वह है जो मैंने प्रदान किया था। आधार मामला शून्य इंगित करता है, गैर-शून्य विफलता इंगित करता है। यदि कॉलर विशिष्ट असफलताओं को संभाल नहीं सकता है, तो आपको कोई परवाह नहीं है कि त्रुटि क्या है, लेकिन यदि आप कॉलर्स को विफलता की कार्रवाई करने की उम्मीद करते हैं, तो सार्थक त्रुटियां देने का अच्छा अभ्यास है। मानक इस तरह के मामले में संरचना देने में मदद करते हैं। – Pyro

+0

* "आपको मानकों का अनुपालन करने की आवश्यकता नहीं है" * - यह एक गैर-अनुक्रमक है; सिस्टम त्रुटि कोड का उपयोग अनुप्रयोग निकास कोड के रूप में "मानकों का अनुपालन" करने के लिए कुछ भी नहीं करता है क्योंकि ऐसा कोई मानक नहीं है, जो ऐसा करने का सुझाव देता है। * "यदि आप कॉलर्स को विफलता की कार्रवाई करने की उम्मीद करते हैं, तो सार्थक त्रुटियां देने का अच्छा अभ्यास है" * - मैं सहमत हूं, लेकिन सिस्टम त्रुटि कोड का उपयोग करके यह खराब रूप से हासिल किया जाता है क्योंकि उनमें से हजारों हैं (इसलिए कॉलर संभवतः उन पर विचार नहीं कर सकता सभी) और वे एक सार्थक तरीके से एक अनुप्रयोग-विशिष्ट त्रुटि का वर्णन करने के लिए बहुत सामान्य होने की संभावना है। –

0

केवल वास्तविक सम्मेलन 0 मतलब यह है कि सफलता और ग़ैर शून्य मान (आमतौर पर 1) विफलता का मतलब है। इस पर एक आधिकारिक संदर्भ के लिए, उदाहरण के लिए exit पर, माइक्रोसॉफ्ट के सी ++ दस्तावेज़ देख सकेंगे:

आमतौर पर, फोन करने वाले एक सामान्य बाहर निकलने का संकेत करने के लिए 0 करने के लिए status मूल्य सेट, या कुछ अन्य मूल्य के लिए एक त्रुटि इंगित करने के लिए।

या Envrionment.Exit और Environment.ExitCode पर सी # डॉक्स जो नाना प्रकार से राज्य:

उपयोग 0 (शून्य) से संकेत मिलता है कि इस प्रक्रिया सफलतापूर्वक पूर्ण हुआ।

और

डिफ़ॉल्ट मान 0 (शून्य) को इंगित करता है जो कि इस प्रक्रिया को सफलतापूर्वक पूरा कर रहा है।

और

एक त्रुटि इंगित करने के लिए एक गैर शून्य संख्या का उपयोग करें। अपने आवेदन में, आप अपने स्वयं के त्रुटि कोड को गणना में परिभाषित कर सकते हैं, और परिदृश्य के आधार पर उपयुक्त त्रुटि कोड वापस कर सकते हैं। उदाहरण के लिए, यह इंगित करने के लिए 1 का मान वापस करें कि आवश्यक फ़ाइल मौजूद नहीं है और 2 का मान इंगित करने के लिए कि फ़ाइल गलत प्रारूप में है। विंडोज ऑपरेटिंग सिस्टम द्वारा उपयोग किए जाने वाले निकास कोडों की एक सूची के लिए, विंडोज दस्तावेज़ में System Error Codes देखें।

some other answerers के विपरीत, मैं दृढ़ता से आवेदन बाहर निकलें कोड के रूप में सिस्टम त्रुटि कोड का उपयोग कर के खिलाफ सलाह। सिस्टम त्रुटि कोड के बारे में कुछ नोट:

  • माइक्रोसॉफ्ट उन्हें आवेदन बाहर निकलें कोड कहीं भी के रूप में प्रयोग की सलाह नहीं है, और वास्तव में स्पष्ट रूप से सुझाव है कि आप दस्तावेज में "अपनी खुद की त्रुटि कोड को परिभाषित" मैं ऊपर उद्धरण।
  • माइक्रोसॉफ्ट उनके अपने अनुप्रयोगों या आदेशों में निकास कोड के रूप में लगातार उनका उपयोग नहीं करता है। हालांकि अनुप्रयोगों के कुछ उदाहरण हैं MsiExec.exe जैसे इन कोडों का उपयोग करें, dir, dotnet, या TAEF जैसे बहुत कुछ नहीं हैं।
  • उनका उपयोग करना मेरे लिए एक स्पष्ट रूप से बुरा विचार जैसा लगता है। सिस्टम निकास कोड हैं, जिनमें से अधिकांश आपके विशेष एप्लिकेशन के लिए अप्रासंगिक हैं।यदि आप उनका उपयोग करने का प्रयास करते हैं, तो आप अपने परिदृश्य पर लागू होने वाले कोड ढूंढने के लिए सूची के माध्यम से चुनने वाली उम्र बर्बाद कर रहे हैं, और अंतिम परिणाम आपके एप्लिकेशन को कॉल करने वाले डेवलपर के लिए कम उपयोगी होगा यदि आपने अभी एक छोटी संख्या परिभाषित की है निकास कोडों का जो आपके विशेष एप्लिकेशन के लिए सार्थक हैं - तो इसके बजाय ऐसा करें।
संबंधित मुद्दे