ลีนุกซ์ลบไฟล์ต่างจากที่ Windows ทำ ขั้นแรกให้คำอธิบายสั้น ๆ เกี่ยวกับวิธีจัดการไฟล์ในระบบไฟล์เนทีฟ * unix
i-node
ไฟล์จะถูกเก็บไว้บนดิสก์ในโครงสร้างหลายระดับที่เรียกว่า i-node แต่ละตัวมีหมายเลขเฉพาะบนระบบไฟล์เดียว โครงสร้าง I-โหนดเก็บข้อมูลที่แตกต่างกันเกี่ยวกับไฟล์เช่นขนาดบล็อกข้อมูลที่จัดสรรสำหรับไฟล์ ฯลฯ link counter
แต่เพื่อประโยชน์ของคำตอบนี้มากที่สุดองค์ประกอบของข้อมูลที่สำคัญคือ directories
เป็นไฟล์ที่เก็บบันทึกเกี่ยวกับไฟล์ แต่ละเร็กคอร์ดมีหมายเลข i-node ที่อ้างถึงความยาวชื่อไฟล์และชื่อไฟล์เอง ชุดรูปแบบนี้อนุญาตให้มี 'พอยน์เตอร์' คือ 'ลิงก์' ไปยังไฟล์เดียวกันในสถานที่ต่าง ๆ ที่มีชื่อแตกต่างกัน ตัวนับลิงก์ของ i-node เก็บจำนวนลิงก์ที่อ้างถึง i-node นี้จริง ๆ
จะเกิดอะไรขึ้นเมื่อบางกระบวนการเปิดไฟล์? ก่อนอื่นopen()
ฟังก์ชันจะค้นหาเรคคอร์ดไฟล์ จากนั้นตรวจสอบว่าโครงสร้าง i-node ในหน่วยความจำสำหรับ i-node นี้มีอยู่แล้ว สิ่งนี้อาจเกิดขึ้นหากบางแอปพลิเคชันเปิดไฟล์นี้อยู่แล้ว มิฉะนั้นระบบจะเริ่มต้นโครงสร้าง i-node ใหม่ในหน่วยความจำ จากนั้นระบบจะเพิ่มโครงสร้างตัวนับ i-node ในหน่วยความจำที่เปิดอยู่และกลับสู่แอปพลิเคชันของตัวอธิบายไฟล์
โทรห้องสมุด Linux unlink
เพื่อลบไฟล์ที่เรียกว่า ฟังก์ชันนี้ลบเร็กคอร์ดไฟล์ออกจากไดเร็กทอรีและลดตัวนับลิงก์ของ i-node หากระบบพบว่ามีโครงสร้าง i-node ในหน่วยความจำอยู่และตัวนับ open ไม่เป็นศูนย์การเรียกนี้จะส่งคืนการควบคุมไปยังแอปพลิเคชัน มิฉะนั้นจะตรวจสอบว่าลิงก์ตัวนับกลายเป็นศูนย์หรือไม่และถ้าเป็นเช่นนั้นระบบจะปล่อยบล็อกทั้งหมดที่จัดสรรสำหรับ i-node และ i-node นั้นเองและกลับสู่แอปพลิเคชัน
เกิดอะไรขึ้นเมื่อแอปพลิเคชันปิดไฟล์ ฟังก์ชั่นclose()
ลดเคาน์เตอร์เปิดและตรวจสอบค่าของมัน หากค่าไม่ใช่ศูนย์ฟังก์ชันจะกลับไปที่แอปพลิเคชัน มิฉะนั้นจะตรวจสอบว่าตัวนับลิงก์ i-node เป็นศูนย์หรือไม่ หากเป็นศูนย์จะปล่อยบล็อกทั้งหมดของไฟล์และ i-node ก่อนที่จะกลับไปที่แอ็พพลิเคชัน
กลไกนี้อนุญาตให้คุณ "ลบ" ไฟล์ขณะที่เปิด ในขณะเดียวกันแอปพลิเคชันที่เปิดไฟล์ยังคงสามารถเข้าถึงข้อมูลในไฟล์ได้ ในตัวอย่างของคุณ JRE ยังคงเปิดเวอร์ชันของไฟล์ไว้ในขณะที่มีอีกเวอร์ชันที่อัปเดตบนดิสก์
ยิ่งไปกว่านั้นคุณสมบัตินี้ช่วยให้คุณอัปเดต glibc (libc) - ไลบรารีหลักของแอปพลิเคชันทั้งหมด - ในระบบของคุณโดยไม่รบกวนการทำงานปกติ
ของ windows
20 ปีที่แล้วเราไม่ทราบว่าระบบไฟล์อื่น ๆ ของ FAT ภายใต้ระบบดอส ระบบไฟล์นี้มีโครงสร้างและหลักการจัดการที่แตกต่างกัน หลักการเหล่านี้ไม่อนุญาตให้คุณลบไฟล์เมื่อมีการเปิดดังนั้น DOS และเมื่อเร็ว ๆ นี้ Windows ต้องปฏิเสธคำขอลบใด ๆ ในไฟล์ที่เปิดอยู่ อาจเป็น NTFS จะอนุญาตให้มีพฤติกรรมเช่นเดียวกับระบบไฟล์ * nix แต่ Microsoft ตัดสินใจที่จะรักษาพฤติกรรมการลบไฟล์
นี่คือคำตอบ ไม่สั้น แต่ตอนนี้คุณมีความคิด
แก้ไข : อ่านแหล่งที่มาของความWin32
ยุ่งเหยิงได้ดี: https://blogs.msdn.microsoft.com/oldnewthing/20040607-00/?p=38993
เครดิตไปที่ @ จอน