我正在尝试 exec() 在我的 C 程序中调用 grep 。我正在寻找给定文件中字符串模式的出现次数,这可以通过以下方式实现:
$ grep -e my_string -F my_file.txt -c
这给出了预期的数字输出,例如:
5
但是,我希望等效的似乎有一些困难。以下代码:
char *arg_list[] = {"-e", "my_string", "-F", "my_file.txt", "-c", "\0"};
int pid;
if ((pid = fork()) == 0) {
if (execvp("grep", arg_list) < 0)
perror("execvp");
}
结果是:
my_file.txt:5
-e: : No such file or directory
有两个问题。首先,我只想要数字——而不是找到它的文件。其次,我不确定为什么它试图断言 -e 标志需要是一个文件。如果我将参数列表切换为:
char *arg_list[] = {"-F", "my_file.txt", "-e", "my_string", "-c", "\0"};
然后我回来:
my_file.txt:5
-F: : No such file or directory
我不确定从哪里开始寻找为什么会发生这种情况。我也不确定为什么命令行的 grep 调用的输出只是一个数字,但 exec() 的 grep 调用会输出文件名和数字。
任何帮助,将不胜感激!谢谢你。
编辑:
解决方案:在参数列表中包含程序名称,或者简单地使用 system() 调用。还有,RTFM。