C не может читать из fifo (именованный канал)

Я создаю файл fifo, но не могу его прочитать. В чем проблема? Вот код и вывод. Если я использую O_RDONLY без программы O_NONBLOCK, просто подождите.

pid_t p;
int fd;
char str[]="sample";

mkfifo("myfifo", S_IRUSR | S_IWUSR);

fd = open("myfifo", O_RDWR);

printf("write %d byte\n", write(fd, str, 5));

close(fd);

fd = open("myfifo", O_RDONLY | O_NONBLOCK);

printf("read %d byte\n",read(fd, str, 6));

close(fd);

unlink("myfifo");

Вывод:

write 5 byte
read 0 byte

person Community    schedule 06.04.2016    source источник
comment
Каналы не хранят сообщения. Как только вы закроете файловый дескриптор, написанное вами сообщение будет удалено. Pipes нужно, чтобы потребители читали, пока производители пишут.   -  person alvits    schedule 06.04.2016


Ответы (1)


  1. Проблема в том, что вы закрываете файл,

вы можете попробовать это или разветвить другой процесс и прочитать файл, поэтому в основном именованные fifo используются для межпроцессного взаимодействия.

Эта ссылка подробно объясняет Как отправить простой строка между двумя программами с использованием каналов?

pid_t p;
int fd;
char str[]="sample";

mkfifo("myfifo", S_IRUSR | S_IWUSR);

fd = open("myfifo", O_RDWR);

printf("write %d byte\n", write(fd, str, 5));

printf("read %d byte\n",read(fd, str, 6));

close(fd);

unlink("myfifo"); 
person Dilip Kumar    schedule 06.04.2016