複数の子プロセスに与えられたパイプから char* データを読み取ろうとしています。
各子は、親プロセスが読み取る共有パイプに char* を書き込みます。
私たちがやろうとしているのは、xv6 で実行されている子プロセスに関する情報を解析することです。
単一のプロセスを解析する場合、問題はありませんが、「runcmd」への再帰呼び出しがあるパイプ プロセスを解析する場合、次の問題が発生します。
親の最後で次のコードを使用しました。
while(read(p[0],buff,sizeof(buff)) > 0){
printf(1,"\nprocess from pipe in main: " );
printf(1,buff);
printf(1,"\n");
}
そして子供の最後で:
char * name = ecmd->argv[0];
char * data=(char*)malloc(strlen(name)*sizeof(char)+strlen(pidc2)*sizeof(char)+3);
strcpy(data,name);
char* delimiter="#";
strcpy(data+strlen(name),delimiter);
strcpy(data+strlen(name)+strlen(delimiter),pidc2);
strcpy(data+strlen(name)+strlen(delimiter)+strlen(pidc2),"\0");
write(pp[1],data,sizeof(char)*(strlen(data)));
このコードを「ls|cat」で実行すると、次のように出力されます。
ls#*some_pid*cat#*some_pid*
各子から読み取って印刷する代わりに
ls#*some_pid*
cat#*some_pid*
なぜ別々に送らないのですか?