Я работаю с трубами, и одна труба не открывается, хотя mkfifo()
был успешным.Как увидеть ошибку open()
У меня есть это:
/* create the FIFO (named pipe) */
int ret_mk = mkfifo(out_myfifo, 0666);
if(ret_mk < 0) {
perror(out_myfifo);
unlink(out_myfifo);
return -1;
}
printf("ret_mk = %d\n", ret_mk);
/* write to the FIFO */
out_fd = open(out_myfifo, O_WRONLY);
printf("out_fd = %d\n", out_fd);
, но ничего не печатается после open()
, даже печать произвольного текста не будет отображаться.
От here мы имеем:
open()
функция возвращает целое значение, которое используется для обозначения файла. Если он неудачен, он возвращает -1 и устанавливает глобальную переменнуюerrno
, чтобы указать тип ошибки.
Что я могу сделать, чтобы понять, почему он не откроется?
Ваш код не показывает, как вы знаете, что 'mkfifo()' был успешным. Вам нужно будет захватить или проверить значение, возвращаемое 'mkfifo()', и продемонстрировать, что было 0, чтобы знать, что 'mkfifo()' был успешным. И, как вы теперь знаете, если вы не видите напечатанный номер дескриптора файла, это происходит потому, что 'open()' не завершился, потому что ни один процесс не имеет открытого FIFO для чтения. –