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.
Bagaimana os linux membiarkan aplikasi membaca dari pipa
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
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
Ini
pipe(2)
, bukan mkfifo(3)
, karena pipanya tidak disebutkan namanya.
- person Roman Cheplyaka; 19.11.2010