linux覆盖运行二进制文件

时间:2011-11-03 15:26:14

标签: 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);
}

1 个答案:

答案 0 :(得分:7)

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

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