搜索但似乎没有找到我需要的东西。
我正在寻找运行以下命令的快速 C++ 等效项:
diff file1.log file2.log | wc -l
目前,我正在使用文件管道来从命令行运行 diff,但是我需要在一个大型的、多嵌套的循环中执行此操作,并且花费的时间比我预期的要长得多。被区分的文件每个大约 150-200mb,每个 diff 大约需要 1-2 分钟。
是否有可以通过 C++ 推出的更快解决方案?
这是我目前的调用方法:
static std::string run_cmd(std::string in)
{
// run command
FILE* pipe = popen(in.c_str(), "r");
if (!pipe) return "err";
char buff[128];
std::string res = "";
while (!feof(pipe))
{
if (fgets(buff, 128, pipe) != NULL)
res += buff;
}
pclose(pipe);
return res;
}
// diff 2 given files and return line number differences
std::string fileDiff(std::string file1, std::string file2)
{
std::string f1 = base + file1;
std::string f2 = base + file2;
std::string cmd = "diff " + f1 + " " + f2 + " | wc -l";
std::string res = run_cmd(cmd);
if (res == "err")
return "E: Diff on [" + f1 + "] and [" + f2 + "]";
return res;
}
编辑:
我本质上在做的是记录代码覆盖率。我已将日志记录语句插入到我正在使用的代码库的每个角落和缝隙中,并将每次运行写入其自己的日志文件。我试图通过不将它们包含在构造函数、循环等中来最小化写入损失,并缓冲了实际的写入过程。
我运行的程序通常需要大约 10 分钟。随着我添加的日志记录和差异调用,它的规模扩大到大约 1 天。
在这种情况下,我只关心线条差异的数量,因为它在遗传算法中提供了适应度函数。在这一点上,迭代之间执行路径的分布很重要。