首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux C-实现程序自我更新的能力

Linux C-实现程序自我更新的能力
EN

Stack Overflow用户
提问于 2013-06-21 16:14:42
回答 2查看 1.6K关注 0票数 7

我在Linux环境(Debian-Lenny)上用C语言写了一个程序,希望程序在有更新时进行更新(当有新的更新可用时,程序会得到通知)。我正在寻找一种方法,该程序可以自我更新。

我的想法是,主程序调用一个新程序来处理更新。更新程序将拥有(访问)源代码,并接收关于源代码更改的更新信息,如下所示:

代码语言:javascript
运行
复制
edit1: line 20, remove column 5 to 20;
edit2: line25, remove column 4-7 then add "if(x>3){" from the column4
edit3: line 26, enter a new line and insert "x++;"

然后杀死主进程,重新编译源代码,然后用旧的二进制文件替换新的二进制文件。

或者有没有更好的(更简单的)和标准的方式来实现程序自我更新的能力?

我使用该程序控制一个带有Linux嵌入式板卡的系统。因此,我不希望源代码被其他人访问(如果系统被黑客入侵或其他什么)。如果使用源代码更新程序的最好方法,您建议我如何保护源代码?如果您建议我对源代码进行加密,程序可以使用什么函数(Linux C)对源文件进行加密和解密?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-21 16:42:27

如果您的目标系统是Debian,那么您应该利用Debian打包系统来提供更新。将编译后的应用程序打包到.deb包中,将其分发到包含在系统sources.list中的APT归档中,然后使用apt安排定期更新检查。.deb软件包可以包含一个重新启动应用程序的安装后脚本。

您可以在可以访问internet的“网关”节点上运行apt-proxy缓存代理,并让其他节点将其用作其apt源。

在这种情况下分发源代码可能并不合适,因为这样您就需要在目标系统上包含完整的编译器工具链。

票数 9
EN

Stack Overflow用户

发布于 2013-06-21 16:25:53

您所描述的内容与80年代交付Unix源代码的风格非常相似,这种风格因PERL的开发而流行起来。您可以使用diff获取不同版本源代码之间的更改记录,然后分发这个“补丁”文件,并使用patch在客户端执行必要的修改。这并没有解决网络通信或版本控制问题。

一个可能的缺点是,第一次下载可能需要应用许多补丁来升级版本。在调查来自nntp:comp.sources.unix的旧源代码时,通常会出现这种情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17230540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档