Bagaimana os linux membiarkan aplikasi membaca dari pipa

Saya bingung dengan bagaimana linux membiarkan aplikasi membaca dari pipa seperti "cat /etc/hosts | grep 'localhost'". Saya tahu dalam program independen bercabang seorang anak dan berkomunikasi melalui pipa satu sama lain. Tetapi untuk dua program independen yang berkomunikasi melalui pipa saya tidak tahu caranya. Misalnya "cat /etc/hosts | grep 'localhost'" Bagaimana Grep mengetahui deskriptor file mana yang harus dibaca untuk mendapatkan input dari "cat /etc/hosts". Apakah ada pipa "konvensional" yang disediakan oleh OS, agar Grep mengetahui di mana mendapatkan inputnya? Saya ingin tahu mekanisme di balik ini.


person terry    schedule 15.11.2010    source sumber


Jawaban (1)


grep dalam contoh Anda mendapatkannya dari stdin. Merupakan tanggung jawab shell untuk memanggil pipe(2) untuk membuat pipa dan kemudian dup2(2) di masing-masing anak fork(2) untuk menetapkan ujung pipa mereka ke stdin atau stdout sebelum memanggil salah satu fungsi exec(3) untuk benar-benar menjalankan executable lainnya.

person Ignacio Vazquez-Abrams    schedule 15.11.2010
comment
Hal penting di sini adalah bahwa dalam contoh yang diberikan, cat dan grep merupakan proses turunan dari shell, sehingga berhubungan. - person caf; 16.11.2010
comment
Ini pipe(2), bukan mkfifo(3), karena pipanya tidak disebutkan namanya. - person Roman Cheplyaka; 19.11.2010