Using grep with execl()

Using grep with execl()

本文关键字:execl with grep Using      更新时间:2023-10-16

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

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

但是我不知道如何在c++中做到这一点。我在这里找到了一条线,给了我这条线。

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

它编译和运行,所以我认为它的工作原理,但问题是我需要输出的次数模式发生到一个文件,我尝试下面的行,但预期它没有工作。它给出了这个错误"grep: out.txt: No such file or directory"

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

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

您可以通过系统调用exec(),为它提供shell可执行文件的路径(通常是/bin/sh)并且,作为/bin/sh的参数,字符串-c和与搜索命令对应的字符串(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)。