2009-05-26 20 views
21

प्रक्रियाओं के बीच खुली फ़ाइल को पार करने वाले अधिकांश यूनिक्स सिस्टम पर फोर्क() द्वारा बच्चे/अभिभावक प्रक्रियाओं के लिए आसानी से किया जा सकता है; हालांकि मुझे पहले से ही फोर्क किया गया था "बाद" एक एफडी साझा करने की जरूरत है।विभिन्न प्रक्रियाओं के बीच फ़ाइल डिस्क्रिप्टर को पास करने के लिए पोर्टेबल तरीका

मुझे कुछ webpages मिल गया है जो मुझे बता रहा है कि sendmsg() arbitary प्रक्रियाओं के लिए काम कर सकता है; लेकिन यह बहुत ओएस निर्भर और जटिल लगता है। portlisten मुझे मिल सकता है कि सबसे अच्छा उदाहरण की तरह लगता है, लेकिन मैं एक अच्छी रैपर लाइब्रेरी पसंद करता हूं जैसे कि libevent जो Kqueue, पूल, के सभी जादू को छुपाता है ....

क्या किसी को पता है कि कुछ लाइब्रेरी है (और पोर्टेबल रास्ता) ऐसा करने के लिए?

+0

[यूनिक्स डोमेन सॉकेट को डिमस्टिफाइंग करने पर "फ़ाइल डिस्क्रिप्टर पासिंग" के लिए खोजें [http://www.techdeviancy.com/uds.html) – mgalgs

उत्तर

12

मुझे एक और लाइब्रेरी मिली है (libancillary। यह बस मुझे चाहिए!

+1

यह कोई जवाब नहीं है। – LtWorf

13

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

यह इन दिनों सुंदर पोर्टेबल होगा; बहुत सी चीजें "गैर-पोर्टेबल" तरीके से वापस आती हैं जब (जैसे mmap!) अब बेहद आम हैं। यदि आपको इन दिनों "अधिकांश प्रणालियों" की तुलना में अधिक पोर्टेबल होने की आवश्यकता है, तो आपके पास बहुत से रोचक मुद्दे हैं, लेकिन संभवतः यदि आप हमें क्या कर रहे हैं और आप किस प्लेटफ़ॉर्म पर काम कर रहे हैं, इसके बारे में अधिक बताते हैं (शायद गैर-यूनिक्स पॉज़िक्स प्लेटफार्म?) हम मदद करने में सक्षम हो सकते हैं।

+0

मुझे अभी भी sendmsg() का उपयोग करने में कोई प्रश्न है। मैंने सोचा था कि पहले पैरामीटर के रूप में डोमेन सॉकेट डालना पर्याप्त है, लेकिन ऐसा लगता है कि मुझे अभी भी msghdr.msg_name को डोमेन सॉकेट के sockaddr_un के रूप में भरना है - क्यों? वैसे भी इसे रोकने के लिए? – Francis

10

sendmsg() सिस्टम कॉल का उपयोग करके - प्रक्रियाओं के बीच फ़ाइल डिस्क्रिप्टर (जैसे सॉकेट - जिसे स्मृति मैप किया जा सकता है) को स्थानांतरित करने के लिए यूनिक्स डोमेन सॉकेट-आधारित तंत्र है।

आप Stevens (कर्ट सैम्पसन द्वारा उल्लिखित) में और Wikipedia पर और भी पा सकते हैं।

आप Sending file descriptor by Linux socket पर कार्य कोड के साथ एक और अधिक हालिया प्रश्न पा सकते हैं।

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

  • कोई संबंधित समस्या नहीं^_^