Saya meninjau serangkaian pertanyaan wawancara yang diminta dari admin unix; Saya menemukan topik yang disebut "pipa bernama".
Saya mencari di Google topik; sampai batas tertentu saya sudah bisa memahaminya: - bernama pipa || FIFO
Tetapi saya masih merasa bahwa saya tidak memiliki pengetahuan kapan harus menggunakan jenis pipa khusus ini. Apakah ada situasi khusus di mana pipa yang tidak disebutkan namanya akan gagal berfungsi?
Jawaban:
Named pipes (fifo) memiliki
empattiga kelebihan yang dapat saya pikirkan:mereka dua arah, pipa yang tidak disebutkan namanya mungkin searah*(Diperbarui, terima kasih atas umpan balik dari Stephane Chazelas )
Jadi satu tugas segera yang jelas tidak dapat Anda capai dengan pipa tanpa nama adalah aplikasi klien / server konvensional.
Poin terakhir (terpukul) di atas tentang pipa searah relevan di Linux, POSIX (lihat
popen()
) mengatakan bahwa pipa hanya perlu dibaca atau ditulisi , di Linux searah . Lihat Memahami Kernel Linux (3rd Ed. O'Reilly) untuk perincian spesifik Linux (p787). Pipa penawaran dua arah OS lainnya (tanpa nama).Sebagai contoh, Nagios menggunakan fifo untuk file perintahnya . Berbagai proses eksternal (skrip CGI, pemeriksaan eksternal, NRPE dll) menulis perintah / pembaruan untuk fifo ini dan ini diproses oleh proses Nagios yang persisten.
Pipa yang dinamai memiliki fitur yang tidak seperti koneksi TCP, tetapi ada perbedaan penting. Karena fifo memiliki nama sistem file persisten yang dapat Anda tulis padanya meskipun tidak ada pembaca, diakui penulisan akan memblokir (tanpa I / O async atau non-blocking), meskipun Anda tidak akan kehilangan data jika penerima tidak dimulai (atau sedang dimulai ulang).
Untuk referensi, lihat juga soket domain Unix , dan jawaban untuk pertanyaan Stackoverflow ini yang merangkum metode IPC utama , dan ini yang membahas tentang
popen()
sumber
Pipa yang tidak disebutkan namanya atau anonim menyediakan sarana komunikasi satu arah ke satu, proses satu arah antara berbagai proses yang terkait oleh hubungan orang tua-anak, atau dengan menjadi anak-anak dari orang tua biasa yang menyediakan pipa, seperti shell proses. Karena proses terkait, asosiasi deskriptor file ke pipa bisa implisit dan tidak memerlukan objek dengan nama yang eksternal untuk proses. Pipa yang tidak disebutkan namanya ada hanya selama proses yang menggunakannya mempertahankan deskriptor file terbuka ke pipa. Ketika proses keluar dan OS menutup semua deskriptor file yang terkait dengan proses, pipa yang tidak disebutkan namanya ditutup.
Pipa yang diberi nama sebenarnya adalah FIFO. Ini adalah objek persisten yang diwakili oleh node dalam sistem file. Pipa bernama menyediakan banyak-ke-banyak, komunikasi dua arah antara satu atau lebih proses yang tidak selalu terkait dan tidak perlu ada pada saat yang sama. Nama file pipa berfungsi sebagai alamat atau kontrak antara proses komunikasi. Jika hanya satu proses menulis ke pipa bernama dan satu proses lain membaca dari pipa bernama, maka pipa bernama berperilaku dengan cara yang sama dengan pipa tanpa nama antara dua proses terkait.
Jadi jawaban singkatnya adalah bahwa Anda memerlukan pipa bernama untuk komunikasi antara proses yang tidak terkait yang mungkin tidak ada pada saat yang sama.
sumber
/run
sistem desktop linux Anda mungkin akan menemukan beberapa dari keduanya (bernama fifos dan unix sockets). Ini bentuk IPC .Satu keuntungan yang tidak disebutkan di tempat lain adalah bahwa pipa bernama dapat digunakan di tempat-tempat di mana hanya file yang akan dilakukan.
Sebagai contoh, beberapa klien email memiliki fitur menambahkan konten tanda ~ /. Ke setiap pesan email. Jika .signature adalah opsi baris perintah atau jika klien email dapat melihat bahwa .signature dapat dieksekusi dan menjalankannya, maka Anda tidak memerlukan pipa bernama. Tetapi jika klien email tidak secanggih itu, Anda bisa membuat pipa bernama bernama .signature dan menjalankan aplikasi yang menghasilkan tanda tangan baru setiap kali file dibaca.
sumber
Ada keuntungan lain dari pipa bernama: Anda dapat menggunakannya di berbagai sistem . Misalkan Anda menginginkan komunikasi real-time dari dua proses yang berjalan pada mesin yang berbeda. Kemudian bagikan folder di antara keduanya, letakkan FIFO Anda ke folder, dan pergilah. Ini jauh lebih mudah daripada mengubah aplikasi yang dirancang untuk bekerja pada file menjadi layanan mendengarkan pada port.
sumber