我们正在尝试从提供给多个子进程的管道中读取 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*
为什么不单独发送?