#include <stdio.h>
int main(int argc, char *argv[])
{
printf("remove %s\n", argv[0]);
remove(argv[0]);
printf("rename %s to %s\n", argv[1], argv[2]);
rename(argv[1], argv[2]);
}
$g++ hello.cpp -o hello
$touch tmp
$./hello tmp temp
remove ./hello
rename tmp to temp
为什么可能?
答案 0 :(得分:5)
至少在Unix中(包括Linux和Mac OS X),如果在某人打开文件时删除文件,我实际上并没有消失,直到打开它的程序关闭文件或终止。
答案 1 :(得分:2)
我想你不问怎么做(因为你证明了),但为什么可能呢?
答案是磁盘上的程序(文件)和内存中的程序之间存在差异。
当您运行程序时,通常会将其复制到RAM中并从那里运行,因为CPU只能直接访问RAM中的内容。此副本在概念上独立于磁盘上的文件,即使文件被删除,也可能保留在RAM中。
但是,如果某个操作系统代表正在运行的应用程序(如Windows),则某些操作系统不允许删除该文件。