Soket domain UNIX dan FIFO dapat berbagi sebagian dari implementasinya tetapi secara konsep mereka sangat berbeda. FIFO berfungsi pada level yang sangat rendah. Satu proses menulis byte ke dalam pipa dan yang lain membaca dari itu. Soket domain UNIX memiliki perilaku yang sama dengan soket TCP / IP.
Soket adalah dua arah dan dapat digunakan oleh banyak proses secara bersamaan. Suatu proses dapat menerima banyak koneksi pada soket yang sama dan menghadiri beberapa klien secara bersamaan. Kernel mengirimkan deskriptor file baru setiap kali connect(2)
atau accept(2)
dipanggil pada socket. Paket akan selalu menuju ke proses yang benar.
Pada FIFO, ini tidak mungkin. Untuk komunikasi dua arah, Anda memerlukan dua FIFO, dan Anda membutuhkan sepasang FIFO untuk masing-masing klien Anda. Tidak ada cara menulis atau membaca secara selektif, karena mereka jauh lebih primitif untuk berkomunikasi.
Pipa anonim dan FIFO sangat mirip. Perbedaannya adalah bahwa pipa anonim tidak ada sebagai file pada sistem file sehingga tidak ada proses yang bisa open(2)
. Mereka digunakan oleh proses yang membagikannya dengan metode lain. Jika suatu proses membuka FIFO dan kemudian melakukan, misalnya, a fork(2)
, anaknya akan mewarisi deskriptor file dan, di antaranya, pipa.
Soket domain UNIX, pipa anonim dan FIFO serupa dalam kenyataan mereka menggunakan segmen memori bersama. Detail implementasi dapat bervariasi dari satu sistem ke sistem lain tetapi idenya selalu sama: lampirkan bagian memori yang sama dalam dua proses pemetaan memori yang berbeda untuk meminta mereka berbagi data
( edit: itu akan menjadi satu cara yang jelas untuk mengimplementasikannya tetapi itu adalah bukan bagaimana ini sebenarnya dilakukan di Linux, yang hanya menggunakan memori kernel untuk buffer, lihat jawabannya oleh @ tjb63 di bawah).
Kernel kemudian menangani pemanggilan sistem dan mengabstraksi mekanisme tersebut.