我想exec()调用grep在我的C程序里面。我要寻找一个在给定文件中指定串模式的出现次数,可以用以下方式实现:如何使用execvp()和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()'d grep调用输出文件名和数字。
任何帮助,将不胜感激!谢谢。
编辑:
解决方案:包括在参数列表中的程序名,或简单地使用系统()调用。另外,RTFM。
你真的需要使用execvp吗?也许尝试使用system()。 –
另外,请尝试将“grep”作为args_list中的第一个参数。 –
两者都可以很好地工作。这是使用exec()的一个练习,就是这样。但是谢谢你指出我鼻子下面的东西! – Cody