我想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