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
stdout
dialihkan ke file sementara yang dibuat di pipefs - File di sisi kanan operator pipa memiliki
stdin
set 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 ' stdin
atau stdout
ke 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.