1

我有一个用 C 编写的应用程序,并通过将函数调用写入文件来记录它们。现在我需要在另一个 C 应用程序中重新使用这些记录的函数调用(这也是记录的原因)。

这个应用程序应该做 - 除了其他事情 - 正是记录的事情。

示例:由第一个应用程序编写的 MYLOGFILE

printf("Starting main process w/ pid %d\n", (int)getpid());
    Display *dsp = XOpenDisplay( NULL );

然后第二个应用程序将执行记录并从文件中获取的函数调用。

任何想法如何实现?

4

2 回答 2

1

本质上,您想生成 C 代码并执行该代码,对吗?如果是这种情况,您可以检查可用作库并提供此功能的TCC 。

当然,假设您的平台是受支持的平台之一。

也就是说,我宁愿避免发出 C 代码并让另一个应用程序读取它、编译它并执行它。我建议您选择以下方法之一:

  1. 发明你自己的语言并在你的日志文件中发出它。然后为该语言编写一个解释器,让其他程序读取并解释日志文件。

  2. 在您的第二个程序中嵌入脚本语言(即Lua)并以该语言发出您的日志文件。

哪种解决方案效果最好取决于您必须在日志文件中描述的任务的复杂性。

作为最后一个解决方案,假设您想要发出 C,您可以考虑使用system()来调用您的编译器而不是编译的程序。但我真的很不鼓励你这样做!

于 2010-01-15T15:37:56.090 回答
0

听起来您正在构建某种复制机制。节点 A 执行操作 1 到 N,然后您想在节点 B 上复制这些相同的操作。

这里有很多选择,但它们都分为两类:

选项 1:以现有实用程序可以使用的格式写入日志文件。如果您使用的是 JavaScript 或其他具有“eval”功能的语言,那么这将非常容易。您只需将 JavaScript 写入节点 A 上的日志文件,然后从节点 B “评估”它。

您提供的示例日志反映了这种方法,尽管它对您来说会稍微复杂一些,因为 C 没有“eval”函数。基本上,您必须将日志文件从节点 A 传送到 B,对其进行编译并将其与实现 C 日志使用的功能的库或其他 C 模块链接,然后运行生成的程序。您可以通过将日志文件包含在如下模板中来将其转换为完整的 C 源文件:

int main(int argc, char *argv[]) {
    // Do your setup stuff here.
#include "/path/to/the/log/file"
    // Clean up.
    return 0
}

选项 2。创建一个解析器,在其他程序的上下文中解析和执行日志。

在这种情况下,由于您的日志语句看起来像 C,因此您实际上是在编写一个 C 解释器。

于 2010-01-15T15:38:19.877 回答