gpt4 book ai didi

c++ - 如何编写自替换/更新二进制文件?

转载 作者:IT王子 更新时间:2023-10-29 00:50:55 26 4
gpt4 key购买 nike

我正在尝试编写一个 C 程序,它可能会查找一个 url 并且如果它的新版本可用,它应该能够自行更新。

我试过的方法:

  1. Forkout 一个新的进程来下载新的二进制文件,比如 BINARY.tmp,我使用的代码是:

    int
    forkout_cmd(char *cmdstr) {
    pid_t pid;
    char *cmd[4];

    cmd[0] = "/bin/bash";
    cmd[1] = "-c";
    cmd[2] = cmdstr;
    cmd[3] = NULL;

    pid = vfork();
    if( pid == -1 ) {
    logmsg("Forking for upgradation failed.");
    return -1;
    }else if( pid == 0 ){
    /* we are in child process */
    execvp(cmd[0], cmd);
    logmsg("execl failed while executing upgradation job.");
    }else{
    /* need not to wait for the child to complete. */
    wait(NULL);
    }
    return 0;
    }
  2. 新进程试图覆盖原来的BINARY

    例如,您可能会考虑 forks out 可能正在执行的例程:

    forkout_cmd("wget -O BINARY.tmp https://someurl.com/BINARY_LATEST; /bin/mv -f BINARY.tmp BINARY");

但是,覆盖失败,因为原始二进制文件仍在执行中,因此在磁盘上很忙,有人可以在这里给我一些建议来解决这个问题。

提前致谢。

最佳答案

将当前运行的二进制文件重命名为其他名称,编写新的二进制文件,运行它,然后稍后删除重命名的二进制文件。

关于c++ - 如何编写自替换/更新二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com