在没有系统调用的情况下运行sed

running sed without system call in C

本文关键字:情况下 运行 sed 系统调用      更新时间:2023-10-16

我正在编写C/C++代码,它所做的一件事就是替换一行带有句子UNIX_CODE_TOKEN=的代码。我想我应该使用system()来运行sed -i ...。然而,我注意到system()并不是很有效。因此,我来找你提出好的建议。

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

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

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

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

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