Мы пытаемся читать данные 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 | кот", он будет печатать:
ls#*some_pid*cat#*some_pid*
вместо чтения из каждого ребенка и печать
ls#*some_pid*
cat#*some_pid*
почему не будет ли он отправить их по отдельности?
Непонятно, что вы просите. Ваш дочерний код не показывает код трубы - очень запутанный. Какая большая картина? Вы хотите достичь? – DrKoch
Что произойдет, если вы замените '' \ 0 "' на '' \ n "'? –