เหตุใดฉันจึงเปลี่ยนชื่อไฟล์ปฏิบัติการที่รันได้ แต่ไม่สามารถลบไฟล์ได้?


12

ทุกอย่างอยู่ในชื่อ แต่เป็นทางการมากขึ้น:

ทำไม Windows ให้ฉันเปลี่ยนชื่อไฟล์เรียกทำงานที่รันได้ แต่ไม่ลบมัน?

คำตอบ:


12

ไม่มีสิ่งเช่นการเปลี่ยนชื่อไฟล์ ไฟล์สามารถมีมากกว่าหนึ่งชื่อหรือไม่มีชื่อดังนั้นจึงไม่ใช่ไฟล์ที่คุณเปลี่ยนชื่อ แต่เป็นรายการไดเรกทอรี การเปลี่ยนชื่อเป็นการดำเนินการกับรายการไดเรกทอรีซึ่งไม่ได้รับผลกระทบจากความจริงที่ว่าไฟล์ถูกล็อคเพื่อการทำงาน


2
อืมแล้วทำไมความพยายามในการเปลี่ยนชื่อไฟล์ปกติที่เปิดให้อ่านหรือเขียนล้มเหลว?
Serge

5
@Serge: เนื่องจากกระบวนการที่เปิดไฟล์ที่ขอให้มันล้มเหลวโดยเฉพาะโดยการตั้งค่าสถานะการเปิดที่เหมาะสม
David Schwartz

ธงเปิดเฉพาะใด
n611x007

2
เป็นไปได้มากที่สุดคือตั้งค่าdwShareModeเป็นศูนย์หรือใช้OF_SHARE_COMPATหรือตั้งOF_SHARE_EXCLUSIVEค่าสถานะ
David Schwartz

6

ไม่อนุญาตให้ลบไฟล์ที่เรียกทำงานและ 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

โปรดทราบว่าเช่น Linux จะแมปไฟล์ส่วนที่เรียกใช้งานลงในหน่วยความจำด้วย แต่ก็ไม่มีปัญหาที่จะทำให้คุณสามารถลบไฟล์ที่เรียกใช้งานได้
ChrisInEdmonton

2
@ChrisInEdmonton ใช่ แต่นี่ฉันอธิบายได้ที่นี่: unix.stackexchange.com/questions/49299/…
Serge

เสิร์จมีคำอธิบายที่ดี :)
ChrisInEdmonton

Linux จะไม่อนุญาตให้คุณลบไฟล์ขณะที่กำลังดำเนินการ อย่างไรก็ตามคุณสามารถลบรายการไดเรกทอรีได้เนื่องจากรายการเหล่านั้นไม่ได้ดำเนินการ
David Schwartz

@DavidSchwartz โปรดดูการอัปเดตคำตอบของฉัน Linux อนุญาตให้ฉันยกเลิกการเชื่อมโยงไฟล์ใด ๆ ที่ถูกเรียกใช้งานหากฉันมีสิทธิ์เพียงพอที่จะลบไฟล์นั้น
Serge

2

ฉันเดาว่าเป็นเพราะชื่อเป็นเพียงคุณลักษณะของเนื้อหาไบนารีเดียวกันของไฟล์ดังนั้นตราบใดที่ข้อมูลมีที่จับที่จัดขึ้นโดยกระบวนการทำงานสำหรับมันจะไม่เปลี่ยนแปลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.