为什么C程序可以删除自己然后运行另一个任务?

kev*_*kev 0 c

#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
Run Code Online (Sandbox Code Playgroud)

为什么可能?

Pau*_*lin 5

至少在Unix中(包括Linux和Mac OS X),如果在某人打开文件时删除文件,我实际上并没有消失,直到打开它的程序关闭文件或终止.