2012-09-05 11 views
8

syscall है जो लिनक्स में अप्रत्यक्ष सिस्टम कॉल की अनुमति देता है। इसका उपयोग करने के कारण क्या हैं - और यह फ़ंक्शन पर सीधे कॉल से बेहतर क्यों है?फ़ंक्शन को कॉल करने के बजाय "syscall" का उपयोग करने के क्या कारण हैं?

उत्तर

11

कभी-कभी कर्नेल सिस्टम कॉल जोड़ता है और सी पुस्तकालय के लिए उन्हें समर्थन देने में कुछ समय लगता है।

या शायद आप पुराने लिनक्स वितरण पर संकलित कर रहे हैं, लेकिन एक नए पर चलना चाहते हैं।

उदाहरण कोड:

// syscall 277 is sync_file_range() on x86_64 Linux. The header 
// files lack it on scc-suse10 where we compile, but the 
// performance benefits are substantial, so we just call it 
// directly. FIXME someday. 
#define SYNC_FILE_RANGE_WRITE 2 
    syscall(277, fd, done, n, SYNC_FILE_RANGE_WRITE); 

लेकिन सामान्य रूप में, वहाँ syscall का उपयोग कर यदि आपका संकलन वातावरण में सी पुस्तकालय तुम क्या आवश्यकता है के लिए कोई फायदा नहीं है। (एक बात के लिए, यह लिनक्स-विशिष्ट इंटरफ़ेस का उपयोग करने से भी कम पोर्टेबल है, क्योंकि सिस्टम कॉल नंबर CPU द्वारा भिन्न होते हैं।)

+0

उन्हें केवल ऑपरेटिंग सिस्टम कार्यान्वयन द्वारा CPU द्वारा भिन्न नहीं होना चाहिए। – Wug

+1

@Wug: वास्तविक syscall संख्या x86, x86_64, एआरएम, पीपीसी, आदि पर भिन्न होती है – Nemo

+0

यह ऑपरेटिंग सिस्टम कार्यान्वयन होगा। वे किसी भी तरह से सीपीयू पर निर्भर नहीं हैं, उन्हें किसी शीर्षलेख में परिभाषित किया गया है और कर्नेल में संकलित किया गया है। – Wug

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

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