Невозможно записать в именованный канал - PullRequest
0 голосов
/ 18 ноября 2018

В этом коде моя программа падает, когда я открываю канал для записи.

char pipe[30];
int fd, tmp = 2;
sprintf(pipe, "root_%d", getpid());
ret_val = mkfifo(pipe, 0666);
fd = open(pipe, O_WRONLY); //HERE IS CRASHING - SUDDENLY FREEZES
write(fd, &tmp, sizeof(int));
close(fd)

Все кажется хорошим, но где моя ошибка?

1 Ответ

0 голосов
/ 18 ноября 2018

Это ожидаемое поведение. От man 7 fifo:

Как правило, открытие блоков FIFO до открытия другого конца.

Так что ваш open не вернется, пока кто-нибудь не откроет тот же канал для чтения. Возможно, вы захотите добавить флаг O_NONBLOCK (и, вероятно, получите SIGPIPE при записи) или пересмотреть дизайн.

...