2012-11-13 11 views
7

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

+1

@pst एक यूनिक्स सॉकेट पूरी तरह से अलग है: 'कनेक्ट()', 'स्वीकार करें()' आदि। – glglgl

उत्तर

9

आप एक नामित पाइप (फीफो) इस्तेमाल कर सकते हैं:

आप mkfifo <common path> करते हैं, आप एक प्रयोग दोनों प्रक्रियाओं, पढ़ने के लिए एक और लिखने के लिए एक में इस पथ। फिर आपके पास एक सामान्य पाइप के समान व्यवहार होता है।

4

सबसे आसान समाधान एक नामित पाइप का उपयोग करना है, जो एक पाइप है जिसका फाइल सिस्टम में नाम है ताकि दोनों प्रक्रियाएं इसका संदर्भ दे सकें। एक नामित पाइप mkfifo() कॉल के साथ बनाया गया है, और open() के साथ खोला गया है (एक प्रक्रिया इसे पढ़ने के लिए खोलनी चाहिए, और दूसरा लेखन के लिए)।

आप दो असंबंधित प्रक्रियाओं भी साथ एक अनाम पाइप का उपयोग कर सकते हैं, लेकिन ऐसा करने के लिए, ताकि आप किसी भी तरह की प्रक्रिया है कि अन्य प्रक्रिया के लिए पाइप बनाया से एक खुली फ़ाइल विवरण पारित करने के लिए की जरूरत है। आप यूनिक्स डोमेन सॉकेट पर SCM_RIGHTS संदेश का उपयोग करके ऐसा कर सकते हैं, लेकिन यदि आपके पास यूनिक्स डोमेन सॉकेट है तो आप बस पाइप के बजाय संवाद करने के लिए इसका उपयोग कर सकते हैं। पहली प्रक्रिया में पाइप के अंत का प्रतिनिधित्व करने वाले /proc/<pid>/fd/<fd> सिम्लिंक पर open() का उपयोग करने के लिए दूसरी प्रक्रिया के लिए एक लिनक्स-विशिष्ट विधि है, लेकिन यह काफी बारोक है।

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

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