จริงๆแล้วมันค่อนข้างง่ายอย่างน้อยถ้าคุณไม่ต้องการรายละเอียดการใช้งาน
ก่อนอื่นบน Linux ระบบไฟล์ทั้งหมด (ext2, ext3, btrfs, reiserfs, tmpfs, zfs, ... ) ถูกนำมาใช้ในเคอร์เนล บางคนอาจลดการทำงานของรหัสผู้ใช้ผ่าน FUSE และบางคนมาในรูปแบบของโมดูลเคอร์เนลเท่านั้น ZFS ดั้งเดิม เป็นตัวอย่างที่น่าสังเกตของหลังเนื่องจากข้อ จำกัด สิทธิ์ใช้งาน) แต่อย่างใดยังมีองค์ประกอบเคอร์เนล นี่เป็นพื้นฐานที่สำคัญ
เมื่อโปรแกรมต้องการอ่านจากไฟล์มันจะทำการเรียกไลบรารี่ของระบบต่างๆ open(), read(), close() ลำดับ (อาจจะด้วย seek() โยนทิ้งเพื่อวัดผลที่ดี) เคอร์เนลใช้พา ธ และชื่อไฟล์ที่ให้มาและผ่านระบบไฟล์และเลเยอร์ I / O อุปกรณ์จะแปลสิ่งเหล่านี้เป็นการร้องขอการอ่านแบบฟิสิคัล
อย่างไรก็ตาม ไม่จำเป็นต้องแปลคำขอเหล่านั้นเป็นพิเศษ ทางกายภาพถาวร การเก็บรักษา . สัญญาของเคอร์เนลคือการออกชุดการเรียกของระบบโดยเฉพาะ ระบุเนื้อหาของไฟล์ที่เป็นปัญหา . ตรงไหนในขอบเขตทางกายภาพของเรา "ไฟล์" ที่มีอยู่จะเป็นรอง
บน /proc มักจะติดตั้งสิ่งที่เรียกว่า procfs. นั่นคือประเภทระบบไฟล์พิเศษ แต่เนื่องจากเป็นระบบไฟล์จึงไม่แตกต่างจากเช่นจริง ๆ ext3 ติดตั้งระบบไฟล์บางแห่ง ดังนั้นคำขอจะถูกส่งผ่านไปยังรหัสไดรเวอร์ระบบไฟล์ procfs ซึ่งรู้เกี่ยวกับไฟล์และไดเรกทอรีทั้งหมด และส่งคืนข้อมูลบางส่วนจากโครงสร้างข้อมูลเคอร์เนล .
"ชั้นการจัดเก็บ" ในกรณีนี้คือโครงสร้างข้อมูลเคอร์เนลและ procfs ให้อินเทอร์เฟซที่สะอาดและสะดวกในการเข้าถึง โปรดทราบว่าการติดตั้ง procfs ที่ /proc เป็นแบบแผนเพียง; คุณสามารถติดตั้งที่อื่นได้อย่างง่ายดาย ในความเป็นจริงแล้วบางครั้งก็ทำเช่นใน chroot jails เมื่อกระบวนการทำงานที่นั่นต้องการเข้าถึง / proc ด้วยเหตุผลบางอย่าง
มันทำงานในลักษณะเดียวกันถ้าคุณเขียนค่าลงไฟล์ ที่ระดับเคอร์เนลซึ่งแปลเป็นชุดของ open(), seek(), write(), close() การโทรซึ่งจะถูกส่งผ่านไปยังไดรเวอร์ระบบไฟล์ อีกครั้งในกรณีนี้รหัส procfs
เหตุผลเฉพาะที่คุณเห็น file การคืน empty คือไฟล์จำนวนมากที่เปิดเผยโดย procfs ถูกเปิดเผยด้วย ขนาด 0 ไบต์ ขนาด 0 ไบต์น่าจะเป็นการเพิ่มประสิทธิภาพทางด้านเคอร์เนล (ไฟล์จำนวนมากใน / proc เป็นแบบไดนามิกและสามารถเปลี่ยนแปลงความยาวได้อย่างง่ายดายแม้จากการอ่านหนึ่งไปยังอีกการอ่านต่อไป อาจมีราคาแพงมาก) ไปตามความเห็นต่อคำตอบนี้ซึ่งคุณสามารถตรวจสอบในระบบของคุณเองโดยใช้งานผ่าน strace หรือเครื่องมือที่คล้ายกัน file ประเด็นแรก stat() เรียกใช้เพื่อตรวจจับไฟล์พิเศษใด ๆ จากนั้นใช้โอกาสหากขนาดไฟล์ถูกรายงานเป็น 0 ให้ยกเลิกและรายงานว่าไฟล์นั้นว่างเปล่า
พฤติกรรมนี้ได้รับการบันทึกไว้จริงและสามารถเป็นได้ แทนที่โดยการระบุ -s หรือ --special-files บน file การภาวนา แม้ว่าตามที่ระบุไว้ในหน้าคู่มือที่อาจมีผลข้างเคียง ข้อความด้านล่างมาจากไฟล์ BSD 5.11 หน้าคนลงวันที่ 17 ตุลาคม 2011
โดยปกติไฟล์จะพยายามอ่านและกำหนดประเภทของไฟล์อาร์กิวเมนต์ที่รายงานสถิติ (2) เป็นไฟล์ธรรมดา วิธีนี้ช่วยป้องกันปัญหาเนื่องจากการอ่านไฟล์พิเศษอาจมีผลกระทบที่แปลกประหลาด การระบุ -s ตัวเลือกทำให้ไฟล์ยังอ่านไฟล์อาร์กิวเมนต์ซึ่งเป็นไฟล์พิเศษของบล็อกหรือตัวละคร สิ่งนี้มีประโยชน์สำหรับการพิจารณาประเภทระบบแฟ้มของข้อมูลในพาร์ติชันดิสก์ดิบซึ่งเป็นไฟล์พิเศษที่ถูกบล็อก ตัวเลือกนี้ยังทำให้ไฟล์ไม่สนใจขนาดไฟล์ตามที่รายงานโดย stat (2) เนื่องจากในบางระบบจะรายงานขนาดเป็นศูนย์สำหรับพาร์ติชันดิสก์ดิบ
strace file /proc/versionหรือltrace -S /proc/versionการเพิ่มประสิทธิภาพค่อนข้างเล็ก มันเป็นstat()โทรก่อนและพบว่าขนาดเป็น 0 จึงข้ามการopen()- แต่ก่อนหน้านั้นโหลดไฟล์มายากลหลายไฟล์