GNU/Linux >> Belajar Linux >  >> Linux

Tujuan Menggunakan Fifo Vs File Sementara Atau Pipa?

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.

  1. Bagaimana FIFO "menggandakan aliran keluaran dalam serangkaian perintah shell"? Bukankah ini dilakukan oleh tee bukannya FIFO?

  2. Dalam contoh, mkfifo fifo1 membuat file di direktori saat ini, dan fifo1 sepertinya bisa diganti dengan file biasa. Jadi apa gunanya FIFO "mencegah penulisan data ke file disk perantara"?

  3. 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:

  1. 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.

  2. 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.)

  3. 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).

Terkait:Bagaimana cara membuat jendela baru pada direktori saat ini di tmux?
Linux
  1. Menggunakan Google Drive dari Baris Perintah Linux

  2. Buat file dengan menggunakan baris perintah di Linux

  3. 4 alat untuk mengunduh file apa pun menggunakan baris perintah di Linux

  1. Apa tujuan dari file .bashrc di Linux?

  2. Bagaimana cara menulis stderr ke file saat menggunakan tee dengan pipa?

  3. Apa perbedaan mengarahkan output menggunakan >, &>, >&dan 2&>?

  1. Bagaimana cara membaca baris kedua hingga terakhir dalam file menggunakan Bash?

  2. Mengunduh file dengan wget menggunakan banyak koneksi

  3. Bagaimana cara memasukkan teks ke baris pertama file menggunakan sed?