Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

Привожу код программы:

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 пустой и процесс ждет пока туда кто-нибудь что-нибудь запишет??? Тогда как это сделать? Заранее благодарю!

Опубликовано

Это канал. Естественно, что функция open не вернет ничего до тех пор, пока из канала ничего не будет прочитано.

Записать в поток можно точно также, как и считать. Пишите другую программу, которая будет слать тестовые нули или единицы.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...