2013-03-27 2 views
6

में लिनक्स/यूनिक्स के सिस्टम कॉल का आह्वान कैसे कर सकता हूं कुछ कारणों से, मुझे सिस्टम (लिनक्स) की कुछ सिस्टम कॉलों की आवश्यकता है, मैंने 'syscall' पैकेज के दस्तावेज़ की जांच की और इसके बारे में कुछ भी नहीं मिला ।मैं गोलांग

फिर मैंने अभी एक प्रोजेक्ट देखा (https://github.com/AllenDang/w32/blob/master/kernel32.go) जो विंडोज़ एपिस को लपेटता है। मैंने इसका स्रोत कोड थोड़ा सा पढ़ा।

यह का उपयोग करता है

modkernel32 = syscall.NewLazyDLL("kernel32.dll") 

गतिशील पुस्तकालय लोड करने के लिए। हालांकि, न्यूलाज़ी डीएलएल()

फ़ंक्शन के लिए कोई प्रलेखन नहीं है, मुझे यकीन है कि लिनक्स/यूनिक्स के लिए एक समान कार्य होना चाहिए। क्या कोई भी मुझे बता सकता है कि फ़ंक्शन का नाम या गोलांग में लिनक्स के सिस्टम कॉल का आह्वान करने का तरीका या libc.so से लोड फ़ंक्शन?

अधिक जानकारी

मैं सिस्टम कॉल 'डेमॉन' या 'कांटा' (मैं इस प्रक्रिया daemonize करना चाहते हैं) क्योंकि मैं golang पुस्तकालय उन्हें प्रदान करता है नहीं मिल सकता है आह्वान करने के लिए चाहते हैं।

+0

आप वास्तव में क्या करना चाहते हैं? 'Syscall' पैकेज प्रत्यक्ष सिस्टम कॉल इंटरफ़ेस के लिए सही पैकेज है, लेकिन यह जानने के बिना कि आप क्या करना चाहते हैं, कोई सलाह देना मुश्किल है। हालांकि पैकेज के यूनिक्स संस्करण में आपको DLL लोडिंग नहीं मिलेगी, क्योंकि यह सिस्टम कॉल इंटरफ़ेस का हिस्सा नहीं है। –

+0

धन्यवाद जेम्स आपके उत्तर के लिए। असल में मैं सिर्फ यह जानना चाहता हूं कि मैं सिस्टम कॉल इंटरफ़ेस कैसे प्राप्त कर सकता हूं। –

उत्तर

4

इस समय गो मानक पुस्तकालय में daemon शैली फ़ंक्शन नहीं है। an open bug about adding such a feature है, लेकिन इसे गो 1.1 रिलीज के बाद तक स्थगित कर दिया गया है। मैं कुछ कारणों से बग रिपोर्ट पढ़ने का सुझाव दूंगा क्योंकि यह उतना आसान नहीं है जितना कि यह पहले दिखाई दे सकता है।

हालांकि डेमॉन कांटा होने के अलावा डिमन प्रक्रियाओं को चलाने के अन्य तरीके भी हैं। उदाहरण के लिए, अपस्टार्ट और सिस्टमड जैसे आधुनिक इनिट डिमन्स आपके लिए ऐसी डिमन प्रक्रियाओं का प्रबंधन कर सकते हैं।

+0

धन्यवाद जेम्स। मैं अपने कार्यक्रम में कांटा/डेमॉन का उपयोग नहीं करूंगा लेकिन मैं अब भी सोच रहा हूं कि मैं यूनिक्स के सिस्टम कॉल का आह्वान कैसे कर सकता हूं। मैंने पाया कि Syscall/Syscall6 नामक दो कार्य हैं लेकिन इसके लिए कोई दस्तावेज़ नहीं है। क्या इन दो कार्यों का उपयोग यूनिक्स के सिस्टम कॉल का आह्वान करने के लिए किया जा सकता है? –

+0

'systemcall' पैकेज में फ़ंक्शंस आपको अधिकांश सिस्टम कॉल तक पहुंच प्रदान करता है (जैसा कि आपने अपने प्रश्न में सही ढंग से अनुमान लगाया है)। उदाहरण के लिए, 'syscall.Read'' SYS_read' सिस्टम कॉल का आह्वान करेगा। यदि आप जिस विशेष सिस्टम कॉल के बाद हैं, वह पैकेज द्वारा कवर नहीं है, तो कृपया उनके बारे में विशेष रूप से पूछें। ऊपर दिए गए उत्तर में प्रक्रिया को डिमन करने के बारे में आपके विशिष्ट प्रश्न शामिल हैं। –

+0

सिस्सेल पैकेज आपके द्वारा प्लेटफ़ॉर्म के सभी सिस्कोल (लगभग) सिखाता है। इस पैकेज की सामग्री विभिन्न प्लेटफार्मों के बीच अलग है। प्लेटफॉर्म प्रत्यय वाले स्रोत फ़ाइलों का उपयोग करें, जैसे foo_linux.go और foo_windows.go। बिल्ड करें केवल मिलान प्रत्यय वाले फाइलों को संकलित करेगा। प्लेटफॉर्म आश्रित कोड को कारक करने के लिए यह एक अच्छा और साफ तरीका है। – fuz