私はファイルを検索してその結果をパイプのような他のコマンドに送るプログラムを作っています。 ls |ソート 私はプログラムを実行すると何も起こりません。私が思う問題は、子供が親が読み込みを開始するためにSOバッファに書き込みを停止するのを待つことです。 これはstdoutに送信するもので、パイプが他のコマンドに送るべきものです。パイプとフォークのトラブル
[email protected]:~/Escritorio/busca.2012$ ./busca . -n . -print
./permisos.txt
./busca2.c
./mmap.pdf
./busca3.c~
./cuadernoso4.2011b.pdf
./busca.c~
./busca.c
./busca2.c~
./busca3.c
問題が何か分かりません。
if(!strcmp(argv[4],"-pipe"))
{
int pipefd[2];
int pid,dummi;
if (pipe(pipefd)<0){
perror("pipe");
exit(1);
}
pid = fork();
if (pid<0){
perror("fork");
exit(1);
}
if (pid == 0){//Child process
close(pipefd[1]);//The child is only reading from the pipe
if(dup2(pipefd[0],0)!=0){perror("dup2");exit(1);}
close(pipefd[0]);
char *argumentos[argc-4];
int j;
for (j=5;j<argc;j++){
argumentos[j-5]=argv[j];
}
argumentos[j-5]= NULL;
execvp(argv[5],argumentos);
perror("execve: ");
}else{ //parent
close(pipefd[0]);
if(dup2(pipefd[1],1)!=1){perror("dup2");exit(1);}
close(pipefd[1]);
while(count--){
if(strcmp(files[count]->d_name,".") && strcmp(files[count]->d_name,"..")){
printf("%s/%s\n",argv[1],files[count]->d_name);
free(files[count]);
}
wait(&dummi);
}
}//end pipe
free(files);
を行うことができ、子プロセスは、(「ハング」)走り続けるん、またはそれが途中で終了していますか?言い換えれば:SIGCHLDやSIGPIPEを扱っていますか? – wildplasser
ハングアップします。プロセスは実行を継続します。 – beerLantern
すべてを印刷した後に親stdoutを閉じると機能します。後で標準出力に書きたい場合は、それを再び開くために何をすべきですか? – beerLantern