Setelah melihat soket bernama unix dan saya pikir itu dinamai pipa. Saya melihat pipa nama dan tidak melihat banyak perbedaan. Saya melihat mereka diinisialisasi secara berbeda tetapi itu satu-satunya hal yang saya perhatikan. Keduanya menggunakan fungsi C menulis / membaca dan bekerja sama seperti AFAIK.
Apa perbedaan antara soket domain unix dan pipa bernama? Kapan saya akan memilih satu dari yang lain? Mana yang harus saya gunakan secara default (seperti bagaimana saya menggunakan vektor secara default di C ++ daripada menggunakan deque, daftar atau apa pun jika saya punya kebutuhan)?
Jawaban:
Soket domain UNIX umumnya lebih fleksibel daripada pipa bernama. Beberapa keunggulannya adalah:
Untuk menggunakan banyak fitur ini, Anda perlu menggunakan
send()
/recv()
keluarga panggilan sistem daripadawrite()
/read()
.sumber
open(2)
panggilan biasa , yang membuatnya lebih cocok untuk membangun jalur pipa ad-hoc antara program yang biasanya hanya menggunakan argumen nama file.Satu perbedaan adalah bahwa pipa bernama itu satu arah, jadi Anda harus menggunakan dua di antaranya untuk melakukan komunikasi dua arah. Soket tentu saja dua arah. Tampaknya sedikit lebih rumit untuk menggunakan dua variabel daripada satu (yaitu, dua pipa, bukan satu soket).
Juga, artikel wikipedia cukup jelas pada poin berikut : "Soket domain Unix dapat dibuat sebagai aliran byte atau sebagai urutan datagram, sedangkan pipa hanya aliran byte."
Pipa yang diberi nama sebenarnya adalah dua arah tetapi setengah dupleks . Ini berarti bahwa komunikasi dapat berpindah dari ujung A ke ujung B, atau B ke A, tetapi tidak pernah keduanya pada saat yang bersamaan.
sumber
write
panggilan menghasilkan saturead
panggilan. Dalam mode aliran, data dapat digabungkan menjadi satu aliran panjang, sehingga banyak tulisan dapat dibaca sekaligus, atau sebaliknya. (Windows memiliki pipa datagram, menurut jawaban jtoberon, Unix tidak)