2011-10-11 57 views
1

我有一个C程序,它从不同的文件中调用几个函数,并且在编译时我将所有的目标文件链接在一起以生成二进制文件。然后我开始执行该程序。现在我想编辑各种文件的来源并编译新版本。这将覆盖旧的对象和二进制文件。在程序执行过程中编辑源代码

这样做会影响当前程序的执行吗?它现在会链接新的目标文件吗?如果我覆盖正在运行的二进制文件,这会导致执行停止,还是以其他方式影响执行?或者代码存储在一个不能在开始执行时被覆盖的地方?

我使用gcc编译我的代码。

回答

3

在Unix上,让gcc替换可执行文件将不会对正在运行的程序产生影响。

它的工作方式是只要程序运行,旧的可执行文件就会保留在磁盘上,以便操作系统在需要时可以引用它。将不再有一个目录项指向旧的可执行文件,并且当程序的旧实例停止时,磁盘空间将被回收。

+0

如果我使用'system'函数调用外部程序,那么在执行期间编辑该程序会影响程序执行? – Snitse

+0

@JTS:我很抱歉,但我很努力地理解你的问题。你想达到什么目的? – NPE

+0

对不起,让我更清楚一点。我有一个可执行文件'foo'和一个c程序'bar.c',在'bar.c'内部,我称之为'system(“./foo”);'。我编译并运行'bar.c'。如果我现在覆盖'foo'会不会影响'bar'的执行? – Snitse