linux覆盖运行二进制文件

Kij*_*jan 2 c linux

我如何使用C在linux中执行此操作?我需要编写使用wget下载更新的更新功能,然后用更新替换旧文件,然后启动更新文件.一个想法是使用bash脚本,但没有成功.有什么建议?

编辑:这里的代码与我尝试的类似

char *p_name = "example"; /* name of the running executable */

void update(char *update_url)
{
        if(!fork())
                /* download file to temporary location */
                execlp("wget", "wget" "-q", update_url, "-O", "tmp", NULL);
        wait(NULL);
        FILE *fp = fopen("tmp.sh", "w");
        /* write bash script */
        fprintf(fp, "sleep 5\nmv tmp %s\nchmod +x %s\nrm tmp.sh",
                p_name, p_name);
        fclose(fp);
        execlp("bash", "bash", "tmp.sh", NULL);
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 8

覆盖正在运行的程序实际上并不会覆盖该文件,它基本上会创建一个新文件,同时标记要在程序退出时删除的旧文件.

脚本下载新程序后,必须kill运行正在运行的程序,然后重新启动它.它将从新计划开始.

  • 这实际上是错误的.覆盖文件和替换文件之间存在差异.使用`rename`或`mv` shell命令替换库是安全的.打开文件进行写入并替换内容是不安全的**. (10认同)