Dari APUE
FIFO dapat digunakan untuk menggandakan aliran keluaran dalam serangkaian perintah
shell . Ini mencegah penulisan data ke file
disk perantara (mirip dengan menggunakan pipa untuk menghindari file disk perantara).Tetapi sementara pipa hanya dapat digunakan untuk koneksi linier
antar proses, FIFO memiliki nama, sehingga dapat digunakan untuk
koneksi nonlinier .Pertimbangkan prosedur yang perlu memproses aliran
yang difilter dua kali.mkfifo fifo1 prog3 < fifo1 & prog1 < infile | tee fifo1 | prog2
Kami membuat FIFO dan kemudian memulai prog3 di latar belakang, membaca
dari FIFO. Kami kemudian memulai prog1 dan menggunakan tee untuk mengirim inputnya
ke FIFO dan prog2.
-
Bagaimana FIFO "menggandakan aliran keluaran dalam serangkaian perintah shell"? Bukankah ini dilakukan oleh
tee
bukannya FIFO? -
Dalam contoh,
mkfifo fifo1
membuat file di direktori saat ini, danfifo1
sepertinya bisa diganti dengan file biasa. Jadi apa gunanya FIFO "mencegah penulisan data ke file disk perantara"? -
Apa yang dimaksud dengan "koneksi linier" dan "koneksi nonlinier" antara proses? Apa artinya FIFO dapat digunakan untuk koneksi nonlinier, sedangkan pipa hanya dapat digunakan untuk koneksi linier antar proses?
Terima kasih.
Jawaban yang Diterima:
-
APUE mengatakan “FIFO dapat digunakan untuk menduplikasi aliran keluaran”, tidak dikatakan bahwa FIFO benar-benar menduplikasi aliran keluaran. Seperti yang Anda tunjukkan, duplikasi dilakukan oleh
tee
dalam contoh. -
mkfifo
membuat FIFO, yang terlihat sebagai "file" di direktori yang berisi; tetapi menulis ke FIFO tidak seperti menulis ke file karena data tidak pernah menyentuh disk. Pipa, diberi nama atau lainnya, tidak menyediakan penyimpanan untuk data, mereka menyediakan saluran komunikasi; ujung penulisan pipa tidak dapat menulis data jika tidak ada penerima, pipa hanya meneruskan data, tanpa menyimpannya. (Pada kebanyakan sistem pipa adalah didukung oleh buffer kernel kecil, untuk meningkatkan kinerja, tetapi itu adalah detail implementasi.) -
Hubungan linier antara proses adalah pipa yang dapat direpresentasikan sebagai grafik linier. Dalam contoh, Anda dapat merepresentasikan baris terakhir sebagai
infile → prog1 → tee fifo1 → prog3
yang linier, tetapi jika Anda mencoba untuk mewakili seluruh rantai, mengurangi elemen pemrosesan, Anda perlu
infile → prog1 → prog2 → prog3
yang non-linier (ada satu simpul di grafik,
prog1
, yang memiliki dua simpul keluar).