我將如何在Linux中使用C來做到這一點? 我需要編寫更新函數,使用wget下載更新,然後用更新替換舊文件,然後啓動更新文件。 一個想法是使用bash腳本,但沒有成功。 有什麼建議嗎?Linux覆蓋正在運行的二進制文件
編輯:這裏是代碼類同什麼我想
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);
}
你想要做什麼應該原則上如你所描述的那樣工作。請提供更多關於錯誤發生的信息(理想的實際代碼和錯誤信息)。 – sleske
如果它正在內存中運行加載,真正的問題是如何從正在運行的進程切換到包含更新代碼的新進程。 – Muggen
你嘗試了什麼?你是怎麼失敗的? Linux允許替換打開的文件和運行二進制文件。我猜你有過permssion問題(由root擁有二進制文件,更新爲普通用戶運行或更新) – johannes