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

Программные каналы 2


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

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

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 эмодзи.

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

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

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

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