У меня возникают некоторые трудности в следующем:
Я пытаюсь отправить канал дочернему узлу внутри функции, а затем записать в него ребенка.
Следующие части кода будут объяснить это лучше:Передача трубы между родителем и дочерним элементом внутри функции
int p[2];
int i;
pipe(p);
close(p[1]);
if(fork1() == 0){
close(p[0]);
runcmd(parsecmd(buf),p);
}
wait(0);
}
while(read(p[0],&i,sizeof(int)) != 0){
printf(1," id: %d\n",i);}
и RunCmd будет иметь следующий код:
...
void runcmd(struct cmd *cmd,int pp[]){
int j = getpid();
write(pp[1],&j,sizeof(int));
close(pp[1]);
...
, к сожалению, ожидаемый результат должен быть - родительская напечатает идентификатор (GETPID является функция, которая возвращает текущий текущий идентификатор процесса), но он этого не делает, он ничего не выводит при вызове. что я сделал не так?
Я не думаю, что 'wait (0);' разрешен. Я не нашел на страницах man, что один может передать указатель NULL на 'wait()' –
, ожидание (0) разрешено, потому что это xv6 и не нормально linux ... – Tai