ทุกอย่างอยู่ในชื่อ แต่เป็นทางการมากขึ้น:
ทำไม Windows ให้ฉันเปลี่ยนชื่อไฟล์เรียกทำงานที่รันได้ แต่ไม่ลบมัน?
ทุกอย่างอยู่ในชื่อ แต่เป็นทางการมากขึ้น:
ทำไม Windows ให้ฉันเปลี่ยนชื่อไฟล์เรียกทำงานที่รันได้ แต่ไม่ลบมัน?
คำตอบ:
ไม่มีสิ่งเช่นการเปลี่ยนชื่อไฟล์ ไฟล์สามารถมีมากกว่าหนึ่งชื่อหรือไม่มีชื่อดังนั้นจึงไม่ใช่ไฟล์ที่คุณเปลี่ยนชื่อ แต่เป็นรายการไดเรกทอรี การเปลี่ยนชื่อเป็นการดำเนินการกับรายการไดเรกทอรีซึ่งไม่ได้รับผลกระทบจากความจริงที่ว่าไฟล์ถูกล็อคเพื่อการทำงาน
dwShareMode
เป็นศูนย์หรือใช้OF_SHARE_COMPAT
หรือตั้งOF_SHARE_EXCLUSIVE
ค่าสถานะ
ไม่อนุญาตให้ลบไฟล์ที่เรียกทำงานและ DLL ได้เนื่องจาก Windows แม็พส่วนต่าง ๆ ของไฟล์ที่เรียกทำงานลงในหน่วยความจำซึ่งเป็นส่วนหนึ่งของการสร้างกระบวนการดังนั้นจึงจำเป็นต้องมีไฟล์ในช่วงอายุการใช้งานของกระบวนการ
น่าเสียดายที่ฉันไม่มีเหตุผลที่แท้จริงว่าทำไมยังอนุญาตให้เปลี่ยนชื่อไฟล์ดังกล่าว ฉันเดาว่าจะทำเพื่อเปิดใช้งานการอัปเดตไฟล์ dll และ exe ในขณะที่พวกเขากำลังทำงานเพื่อลดเวลาการหยุดชะงักของบริการ
ในทางตรงกันข้าม linux (unix ทั่วไป) อนุญาตให้ลบไฟล์ที่เรียกใช้งานได้ในขณะที่กำลังทำงาน:
tmp]$ cp /usr/bin/md5sum .;ll md5*; \
(./md5sum /home/pub/iso/FC5/FC-5-i386-DVD.iso & ); \
rm md5sum ; ll md5*;ps -f
-rwxr-xr-x 1 sergey sergey 37276 Oct 16 02:38 md5sum
ls: cannot access md5*: No such file or directory
UID PID PPID C STIME TTY TIME CMD
sergey 2423 2422 0 02:32 pts/1 00:00:00 -bash
sergey 2533 1 0 02:38 pts/1 00:00:00 ./md5sum /home/pub/iso/FC5/FC-5-
sergey 2536 2423 0 02:38 pts/1 00:00:00 ps -f
ฉันเดาว่าเป็นเพราะชื่อเป็นเพียงคุณลักษณะของเนื้อหาไบนารีเดียวกันของไฟล์ดังนั้นตราบใดที่ข้อมูลมีที่จับที่จัดขึ้นโดยกระบวนการทำงานสำหรับมันจะไม่เปลี่ยนแปลง