У меня есть программа, в которой я пишу из нескольких дочерних процессов в канал, а затем пытаюсь прочитать все сообщения, написанные для каждого процесса, из каждого канала и распечатать их на экране , Со следующим кодом (в частности, цикл while с использованием системного вызова read
для хранения сообщений в буфере buf
), моя программа будет зависать и не выходить, а также не печатать все сообщения, отправленные в разные процессы.Что заставляет мою программу зависать и не выходить должным образом? (pipe, read system call, while loop)
for (i = 0; i < MAXP; i++) {
if(id == i) {
while(read(pfds[i][0], buf, sizeof(buf)) > 0)
printf("process%d has received a message from %s\n",i,buf);
}
}
Однако, с помощью следующего кода, программа завершает работу корректно, но не печатает все сообщения (так как они не все читали):
for (i = 0; i < MAXP; i++) {
if(id == i) {
nbytes = read(pfds[i][0], buf, sizeof(buf));
printf("process%d has received a message from %s\n",i,buf);
}
}
Это мой код писать в трубы:
write(pfds[j][1],msg,9); // write the message to j pipe
и сообщение:
sprintf(msg, "process%d", i); // create the message - 9 bytes (inc. null term)
// the message is "process0" or "process1" ... through "process8"
, который является 9 байт массив символов:
char msg[9];
Решение
for (j = 0; j < MAXP; j++) {
close(pfds[j][1]); // close write to j from i
}
Perfect. Я добавил цикл for для закрытия всех концов конвейера. Благодарю. –
Рад это слышать! :) – JoeC