0

我正在编写 C/C++ 代码,它所做的一件事就是替换包含句子的行UNIX_CODE_TOKEN=。我以为我会system()为了运行而使用sed -i .... 不过,我注意到这system()不是很有效。因此,我来​​向您寻求好的建议。

是否有一个 C/C++ 内置函数可以不sed -i使用system()? 请不要告诉我fstream在 C++ 或FILE *C 中使用(fseek 和 lseek 也无济于事,因为我想替换一行中的特定单词),我决定不编写一个进行替换的函数。

感谢您的任何帮助/建议/回复。

4

1 回答 1

4

system() 通常通过 fork() 来拆分进程, exec() 在子进程中启动 /bin/sh (或其他),并在父进程中执行 waitpid() 以阻塞直到子shell完成。在您的情况下,您可能需要自己实现此功能,但直接执行 exec() /bin/sed 而不是 /bin/sh。

然而,正确地实现这一点是一项合理的工作。您是否真的对程序进行了基准测试和分析以确定 system() 是否甚至是性能问题?sed 很可能很慢 - 毕竟它必须访问一个慢速磁盘 - 而且您的调查不正确地指法 system()。您可能会发现最快的方法确实是直接在您的程序位中处理文件,这实际上并不会使其总体上更快。

你试图解决的更高层次的问题是什么?很有可能完全不需要编辑文件。

于 2012-08-26T12:04:58.433 回答