处理代码中的二进制文件删除

Stu*_*ent 0 c linux

让我们假设我有以下C代码无限接受输入并打印它.我使用gcc将它编译为二进制文件,比如Test.我在终端中执行这个二进制文件,然后同时从另一个终端删除这个二进制文件.

有没有办法在代码中处理这个删除并退出正在执行的二进制文件?

#include <stdio.h>

int main(){
    while(1){
        // HANDLE BINARY FILE DELETION AND QUIT
        char input[50];
        scanf("%s",input);
        printf("\n%s\n",input);
    }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ger 5

有没有办法在代码中处理这个删除并退出正在执行的二进制文件?

如果存在这样的事情,则C不提供专门用于识别或响应正在运行的程序的磁盘映像上的操作的机制.您可以想象通过argv[0](不保证成功)识别该文件,并定期检查它.您甚至可能找到第三方库或系统特定的机制,用于在修改或删除以这种方式发现的二进制文件时注册接收信号.然而,这些都不是内置于C中的.

某些操作系统可能首先阻止此类删除,甚至提供您在操作系统级别描述的行为.但总的来说,你提出的建议只是你不应该期望或依赖的事情.程序的磁盘映像与运行进程几乎是分开的.