UNIX डोमेन सॉकेट और FIFO उनके कार्यान्वयन का कुछ हिस्सा साझा कर सकते हैं, लेकिन वे वैचारिक रूप से बहुत अलग हैं। FIFO बहुत निम्न स्तर पर कार्य करता है। एक प्रक्रिया पाइप में बाइट्स लिखती है और दूसरा इसे पढ़ता है। एक यूनिक्स डोमेन सॉकेट में टीसीपी / आईपी सॉकेट के समान व्यवहार होता है।
एक सॉकेट द्विदिश है और एक साथ कई प्रक्रियाओं द्वारा उपयोग किया जा सकता है। एक प्रक्रिया एक ही सॉकेट पर कई कनेक्शनों को स्वीकार कर सकती है और एक साथ कई ग्राहकों को शामिल कर सकती है। कर्नेल हर बार एक नई फ़ाइल डिस्क्रिप्टर देता है connect(2)
या accept(2)
सॉकेट पर कॉल किया जाता है। पैकेट हमेशा सही प्रक्रिया में जाएंगे।
एक FIFO पर, यह असंभव होगा। द्विदिश संचार के लिए, आपको दो FIFO की आवश्यकता होती है, और आपको अपने प्रत्येक क्लाइंट के लिए FIFOs की एक जोड़ी की आवश्यकता होती है। चयनात्मक तरीके से लिखने या पढ़ने का कोई तरीका नहीं है, क्योंकि वे संवाद करने के लिए बहुत अधिक आदिम तरीका है।
अनाम पाइप और एफआईएफओ बहुत समान हैं। अंतर यह है कि अनाम पाइप फाइल सिस्टम पर फाइलों के रूप में मौजूद नहीं है इसलिए कोई प्रक्रिया नहीं हो सकती open(2)
है। उनका उपयोग उन प्रक्रियाओं द्वारा किया जाता है जो उन्हें किसी अन्य विधि द्वारा साझा करते हैं। यदि एक प्रक्रिया एक एफआईएफओ खोलती है और फिर प्रदर्शन करती है, उदाहरण के लिए, एक fork(2)
, इसका बच्चा अपने फाइल डिस्क्रिप्टर और, उनमें से, पाइप को इनहेरिट करेगा।
UNIX डोमेन सॉकेट, अनाम पाइप और FIFOs समान हैं, वे साझा मेमोरी सेगमेंट का उपयोग करते हैं। कार्यान्वयन का विवरण एक प्रणाली से दूसरे में भिन्न हो सकता है, लेकिन विचार हमेशा समान होता है: मेमोरी के समान हिस्से को दो अलग-अलग प्रक्रियाओं में मेमोरी मैपिंग में संलग्न करें जिससे उन्हें डेटा साझा किया जा सके
( संपादित करें: जो कि इसे लागू करने का एक स्पष्ट तरीका होगा लेकिन वह है न कि यह वास्तव में लिनक्स में कैसे किया जाता है, जो केवल बफ़र्स के लिए कर्नेल मेमोरी का उपयोग करता है, नीचे @ tjb63 द्वारा उत्तर देखें)।
कर्नेल तब सिस्टम कॉल को संभालता है और तंत्र को सार करता है।