mp3moto Опубликовано 28 февраля, 2007 Жалоба Поделиться Опубликовано 28 февраля, 2007 Привожу код программы: int main(){ int fifo1[2], fifo2[2], fdr, st, i; FILE *f; char buff[1024]; if((mknod("fifo1",S_IFIFO|0666,0)<0) && (errno != EEXIST)) printf("FIFO ERROR"); f = fopen("msg.txt","r"); if ((fdr = open("fifo1",O_WRONLY))<0)// <======= printf("\nERROR"); else printf("0"); write(fdr,"message",1024); printf("\nexecuting client"); if (fork == 0) execvp("./client",NULL); while(i=wait(&st)>0); unlink("fifo1"); /*fgets(buff,1024,f); printf(buff);*/ exit(0); } Вопрос: почему процесс "засыпает" на месте отмеченном <======= ??? Файл fifo1 функцией mknod вроде как создается (в текущей папке появляется значок "кран"), а открыть его не может... Или может от того, что fifo1 пустой и процесс ждет пока туда кто-нибудь что-нибудь запишет??? Тогда как это сделать? Заранее благодарю! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Aceler Опубликовано 28 февраля, 2007 Жалоба Поделиться Опубликовано 28 февраля, 2007 Это канал. Естественно, что функция open не вернет ничего до тех пор, пока из канала ничего не будет прочитано. Записать в поток можно точно также, как и считать. Пишите другую программу, которая будет слать тестовые нули или единицы. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.