在C中运行没有系统调用的sed

时间:2012-08-26 11:51:20

标签: c++ c bash

我正在研究一个C / C ++代码,它所做的一件事就是替换一个句子为UNIX_CODE_TOKEN=的行。我以为我会使用system()来运行sed -i ...。不过,我注意到system()效率不高。因此,我来​​找你提出好的建议。

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

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

1 个答案:

答案 0 :(得分:4)

system()通常用fork()实现,用于将进程拆分,exec()用于子进程中的launch / bin / sh(或其他),以及父进程中的waitpid()阻塞直到子shell完成。在你的情况下,你可能需要自己实现,但直接exec()/ bin / sed而不是/ bin / sh。

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

您尝试解决的高级问题是什么?很有可能完全删除编辑文件的需要。