アドバイスを宜しくお願いします。
forkしてdup2をしてexecvpで実行する、という手順は踏んでいるのですが、リダイレクトや’;’,’&’等も使いたいので、
孫プロセスを呼び出して実行したいのです。
OSはFC5、コンパイラはgccです。現在システムコールについて学んでおります。
詳細やヘッダのincludeを省略すると、以下のようにしてみました:
pipe(fd); if(fork()==0){ dup2(fd[1], STDOUT_FILENO); close(fd[0]); close(fd[1]); arg[0] = "ls"; arg[1] = NULL; if(fork()==0){ execvp(arg[0], arg); } } if(fork()==0){ dup2(fd[0], STDIN_FILENO); close(fd[0]); close(fd[1]); arg[0] = "wc"; arg[1] = NULL; if(fork()== 0){ execvp(arg[0], arg); } }これで、ls|wcが実行できると思い、コンパイルして実行するのですが、実行するとファイル記述子のエラー,
と出てしまいます。
if(fork()==0){
execvp(arg[0], arg);
}
の部分を、単に
execvp(arg[0], arg);
とすれば実行はうまくいきます。これはどういうわけなのでしょうか。アドバイス宜しくお願いします。