0

我的项目的一点背景:我们有任意数量的文件,每个文件需要一个单独的进程,然后需要使用 exec() 调用进行搜索,以查找每次使用特定 KEY 时。我知道如何使用以下命令从命令行使用 grep:

grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt

但我无法弄清楚如何在 C++ 中做到这一点。我在这里找到了一个线程,它给了我这条线。

execl("/bin/grep","grep",pattern,filename,NULL);

它编译并运行,所以我认为它可以工作,但问题是我需要将模式发生的次数输出到文件中,我尝试了下面的行,但预计它不起作用。它给出了这个错误“grep:out.txt:没有这样的文件或目录”

execl("/bin/grep", "grep",pattern,fileName,output,NULL);

这是我项目这一部分的方向。

您可以通过系统调用 exec() 执行此操作,为它提供 shell 可执行文件的路径(通常是 /bin/sh ),以及作为 /bin/sh 的参数的字符串 -c 和字符串对应于搜索命令( grep -o ... )。

非常感谢这里的一些指导!

4

1 回答 1

0

对于您在命令行上执行的实际执行将是:

 execl("/bin/sh", "/bin/sh", "-c", "grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt")

这将意味着 shell 将接受该行grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt,解释它并运行它。请注意,这将包括通配符扩展和 shell 的所有功能。

然后当然,如果你不想在它完成后继续,你将不得不fork首先因为execl如果它在启动程序时成功(即)不会返回bash

于 2015-10-06T12:24:31.257 回答