ฉันได้อ่านเกี่ยวกับวิธีการใช้ไพพ์ในเคอร์เนล Linux และต้องการตรวจสอบความเข้าใจของฉัน หากฉันไม่ถูกต้องคำตอบพร้อมคำอธิบายที่ถูกต้องจะถูกเลือก
- Linux มี VFS เรียกว่า pipefs ที่ติดตั้งในเคอร์เนล (ไม่ใช่ในพื้นที่ผู้ใช้)
- pipefs มีซุปเปอร์บล็อกเดียวและติดตั้งที่รูทของมันเอง (
pipe:
) ข้างๆ/
- pipefs ไม่สามารถดูได้โดยตรงเหมือนกับระบบไฟล์ส่วนใหญ่
- รายการไปยัง pipefs คือผ่าน
pipe(2)
syscall -
pipe(2)
syscall ใช้โดยเปลือกหอยสำหรับท่อกับ|
ผู้ประกอบการ (หรือด้วยตนเองจากกระบวนการอื่น ๆ ) สร้างไฟล์ใหม่ใน pipefs ซึ่งทำงานสวยมากเช่นไฟล์ปกติ - ไฟล์ทางด้านซ้ายของผู้ประกอบการไปป์ได้
stdout
ถูกเปลี่ยนเส้นทางไปยังไฟล์ชั่วคราวที่สร้างขึ้นใน pipefs - ไฟล์ทางด้านขวาของผู้ปฏิบัติงานไปป์มี
stdin
ไพพ์ตั้งค่าไฟล์ไว้ที่ pipefs - pipefs ถูกเก็บไว้ในหน่วยความจำและผ่านเคอร์เนลเวทย์มนตร์บางอย่างไม่ควรทำเพจ
นี่คือคำอธิบายว่าท่ออย่างไร (เช่น ls -la | less
) ว่าถูกต้องหรือไม่?
สิ่งหนึ่งที่ผมไม่เข้าใจคือวิธีการบางอย่างเช่นทุบตีจะตั้งเป็นกระบวนการstdin
หรือจะอธิบายไฟล์ที่ส่งกลับโดยstdout
pipe(2)
ฉันยังไม่พบอะไรเกี่ยวกับสิ่งนั้น
ใช่ฉันหมายถึงการปฏิบัติการระดับล่างโดยเฉพาะโดยมีข้อสันนิษฐานว่า
—
Brandon Wamboldt
|
โอเปอเรเตอร์กำลังเรียกpipe(2)
เช่นเดียวกับกระบวนการที่ทุบตี
pipe()
เรียกเคอร์เนลพร้อมกับเครื่องจักรที่รองรับ (pipefs
ฯลฯ ) นั้นต่ำกว่า|
โอเปอเรเตอร์ที่มีให้ในเปลือก หลังมักจะใช้งานโดยใช้อดีต แต่ไม่จำเป็นต้องเป็น