C++ 将grep与execl()一起使用

C++ 将grep与execl()一起使用,c++,c,shell,grep,execl,C++,C,Shell,Grep,Execl,我的项目有一个小背景:我们有任意数量的文件,每个文件都需要一个单独的进程,然后需要使用exec()调用进行搜索,以便在每次使用特定键时查找。我知道如何使用以下命令从命令行使用grep: grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt 但是我无法理解如何在C++中实现这一点。我在这里发现了一条线,它给了我这条线 execl("/bin/grep","grep",pattern,filename,NULL); 它可以编译和运行,所以我认为它可以工

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

grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt
<>但是我无法理解如何在C++中实现这一点。我在这里发现了一条线,它给了我这条线

execl("/bin/grep","grep",pattern,filename,NULL);
它可以编译和运行,所以我认为它可以工作,但问题是我需要输出模式出现在文件中的次数,我尝试了下面这行,但预期它不起作用。它给出了这个错误“grep:out.txt:没有这样的文件或目录”

以下是我项目这一部分的方向

您可以通过 系统调用exec(),为其提供shell可执行文件的路径(通常为/bin/sh) 并且,作为/bin/sh的参数,字符串-c和对应于search命令的字符串 (grep-o…)


在此提供一些指导将不胜感激

对于您在命令行上执行的实际操作,应该是:

 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
),则不会返回。

您将输出文件列为输入文件。你想要的是重定向grep的输出。您需要阅读上面的链接,了解如何执行,因为您的项目特别提到您不会直接执行
grep
。你是做什么的?您可以直接执行
grep
。当它不起作用时,你仍然可以在这里询问,而不是阅读你的项目说明。请阅读您的项目说明。谢谢A.s.H.hvd,您没有任何帮助。
 execl("/bin/sh", "/bin/sh", "-c", "grep -o KEY FILENAME.txt | wc -l > OUTPUT.txt")