私のCプログラムの中でgrepへの呼び出しをexec()しようとしています。しかしgrepでexecvp()を使用するには?
5
、次のような予想通りの数の出力を与える
$ grep -e my_string -F my_file.txt -c
、:私は達成することができ、特定のファイル内の文字列パターンの出現回数を探しています私が同等であることを望んだことは、いくつかの困難を抱えているようです。次のコード:中
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呼び出しはファイル名と番号の両方を出力する。
助けていただけたら幸いです!ありがとうございました。
EDIT:
ソリューション:引数リストにプログラム名を含め、または単にシステム()の呼び出しを使用しています。また、RTFM。あなたは二つの問題(ここでは正規表現についてJWZの引用を挿入)している
本当にexecvpを使用する必要がありますか?たぶんsystem()を使ってみてください。 –
また、args_listの最初のargとして "grep"を入れてみてください。 –
どちらも完璧に動作します。これはexec()を使用するエクササイズです。しかし、私の鼻の下に何があったのかを指摘してくれてありがとう! – Cody