2014-04-03 11 views
5

मैं निम्नलिखित कोड में आया था।आईओसीटीएल वापसी मूल्य

if((error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context))) 
{ 
     return EXIT_FAILURE; 
} 

मेरे सवालों का अनुसरण कर रहे हैं:

  1. करता IOCTL हमेशा वापसी '0' सफलता पर?
  2. निम्न अभिव्यक्ति एक सकारात्मक/TRUE का मूल्यांकन कैसे करती है?

    (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) 
    

कैसे ऊपर अभिव्यक्ति ioctl के एक गैर शून्य वापसी मान के लिए सच करने के लिए मूल्यांकन करता है?

+2

1) नहीं। इसे पढ़ें: http://man7.org/linux/man-pages/man2/ioctl.2.html 2) "ioctl' मान 0 से अलग होने पर" सत्य "का मूल्यांकन करता है – AntonH

+0

@ एंटोन एच आपको जवाब के रूप में पोस्ट करना चाहिए :) –

+1

@ जेससरामोस मुझे चाहिए, लेकिन चूंकि यह इतना छोटा/त्वरित उत्तर है, मुझे लगता है कि यह एक उत्तर की बर्बादी है। मुझे इतनी प्रतिष्ठा याद आती है: डी – AntonH

उत्तर

6

यह डेवलपर पर है जो इस ioctl को प्रबंधित करने वाले ड्राइवर को विकसित करता है, जो सफलता पर वापस लौटने का अनुरोध करता है। आमतौर पर, 0 का मतलब है कि सब ठीक हो गया है। इस सम्मेलन का उपयोग लंबे समय तक यूनिक्स सिस्टम में किया गया है।

वैसे भी, इस विशेष फ़ाइल वर्णनकर्ता के संबंध में अपना दस्तावेज़ पढ़ें और जानें कि इस फ़ाइल डिस्क्रिप्टर रिटर्न द्वारा कौन से विशेष सिस्टम कॉल को नियंत्रित किया जाता है।

दूसरे प्रश्न के लिए, = ऑपरेटर असाइनमेंट के बाद चर का एक नया मान देता है। इसलिए, वापसी मूल्य (ioctl के लिए) का मूल्यांकन का मूल्यांकन से true पर किया जाता है यदि असाइनमेंट ऑपरेटर द्वारा गैर-शून्य मान वापस किया जाता है।

अधिकांश तरीकों, गैर-शून्य नकारात्मक मानों का अर्थ दोषपूर्ण निष्पादन है। कुछ मामलों में, यूनिक्स सिस्टम read या write सिस्टम कॉल के रूप में सकारात्मक मान लौटाता है। read और write सिस्टम के मामले में उनके सकारात्मक रिटर्न मान का अर्थ है बाइट्स की संख्या जिसे पढ़ा या लिखा गया था।

यह संभव है ioctl वापसी सकारात्मक मूल्य मतलब हो सकता है कि कि निष्पादन सामान्य रूप से चला गया है करने के लिए और हम कुछ राज्य इस विशेष फ़ाइल वर्णनकर्ता के लिए खड़ा है जो कुछ भी लौटा देते हैं। एक बार फिर, अपने दस्तावेज़ों को ध्यान से पढ़ें।

तो, नीचे दिए गए कोड में:

if (error = ioctl(get_card_fd(card_ref), CARD_SETVERSION, &context)) { 
     return EXIT_FAILURE; 
} 

गैर शून्य मान true लिए मूल्यांकन किया जाता है और हम कोड की कि सशर्त ब्लॉक दर्ज करें।

संबंधित मुद्दे