私は、exec
を使ってls
とgrep
システムコールを呼び出すプログラムを作ろうとしています。具体的には、パターンを実行するファイルの数を数えるためにls > tmp; grep -c pattern < tmp
を実行しなければなりません。ご覧のとおり、lsの内容をtmpファイルに保存してから、grepを使ってファイルを数えたいと思っています。execlを使ってgrepの値を取得
pattern = txt
を告白しましょう。
char *a = "ls > tmp";
char *b = " -c ";
char *fin = " < tmp";
char *comanda;
if((comanda = malloc(strlen(pattern)+strlen(pattern)+1)) != NULL){
comanda[0] = '\0'; // ensures the memory is an empty string
strcat(comanda,b);
strcat(comanda, pattern);
strcat(comanda,fin);
} else {
return -1;
}
ret = execl("/bin/sh","sh","-c",a,NULL);
ret = execl("/bin/sh","sh","-c",comanda, NULL);
をしかし、それは私に次のエラーを示しています:私は、次のコードのようなものをしようとしているls: cannot access > tmp: No such file or directory
を。だから、私はgrep
の値を取得する方法を知らないので、execl
関数は値を返さないので、grep
の値はどのようにして得られますか?
'fork()'で作成された子プロセスで 'execl'を実行する必要があります。 'execl()'は現在のプロセスを実行しているプログラムに置き換えます。プログラムをロードしようとしてエラーが発生した場合にのみ返します。 – Barmar
これは私の実際のポイントです。子プロセスでは 'execl'を使用しますが、とにかく同じエラーが表示されます:' ls:アクセスできません> tmp:そのようなファイルやディレクトリはありません ' –
私は変更しない限りエラーを再現できません'char * a =" ls '> tmp' ";' – Barmar