Saya telah membaca tentang bagaimana pipa diimplementasikan di kernel Linux dan ingin memvalidasi pemahaman saya. Jika saya salah, jawaban dengan penjelasan yang benar akan dipilih.
- Linux memiliki VFS yang disebut pipef yang dipasang di kernel (bukan di ruang pengguna)
- pipefs memiliki super blok tunggal dan dipasang di root sendiri (
pipe:), di samping/ - pipef tidak dapat dilihat secara langsung tidak seperti kebanyakan sistem file
- Entri ke pipef adalah melalui
pipe(2)syscall - The
pipe(2)syscall digunakan oleh kerang untuk pipa dengan|operator (atau manual dari proses lainnya) membuat file baru di pipefs yang berperilaku cukup banyak seperti file normal - File di sisi kiri operator pipa
stdoutdialihkan ke file sementara yang dibuat di pipefs - File di sisi kanan operator pipa memiliki
stdinset ke file di pipefs - pipef disimpan dalam memori dan melalui beberapa kernel sulap, tidak boleh halaman
Apakah penjelasan tentang cara kerja pipa (mis. ls -la | less) Ini benar?
Satu hal yang saya tidak mengerti adalah bagaimana sesuatu seperti bash akan mengatur proses ' stdinatau stdoutke file descriptor yang dikembalikan oleh pipe(2). Saya belum dapat menemukan apa pun tentang itu.
Ya, saya secara khusus merujuk pada operasi tingkat bawah, dengan asumsi bahwa
—
Brandon Wamboldt
|operator hanya memanggil pipe(2)sebagai proses seperti halnya bash.
pipe()panggilan kernel bersama dengan mesin yang mendukung itu (pipefs, dll) adalah tingkat yang lebih rendah dari|operator yang ditawarkan dalam shell Anda. Yang terakhir biasanya diimplementasikan menggunakan yang pertama, tetapi tidak harus.