gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:22 25 4
gpt4 key购买 nike

我正在编写 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完成。在您的情况下,您可能需要自己实现它,但直接执行 exec()/bin/sed 而不是/bin/sh。

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

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

关于c++ - 在 C 中运行没有系统调用的 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com