ошибка mkfifo () - - - > "ошибка создания именованного канала.: Файл существует"

функция mkfifo принимает 2 аргумента, путь и режим. Но я не знаю, каков формат пути, который он использует. Я пишу небольшую программу для создания именованного канала и как путь в mkfifo. Используя /home/username/Documents например, но он всегда возвращает -1 С .

Я проверил этот dir много раз, и внутри него нет трубы. Вот мне интересно, в чем проблема. Режим, который я использую в mkfifo, - 0666 или 0777.

3 ответов


Вы дали mkfifo() имя существующего каталога, таким образом, ошибку. Вы должны дать ему имя несуществующего файла:

mkfifo("/home/username/Documents/myfifo", 0600);

аргумент "путь" к mkfifo() должен указать полный путь, каталог и имя файла.

таким образом, это будет выглядеть так:

char *myfifo="/home/username/Documents/mypipe";

mkfifo(myfifo, 0777);

в качестве примечания, вы должны избегать использования восьмеричных бит разрешений и использовать именованные константы вместо (от sys/stat.h), так:

mkfifo(myfifo, S_IRWXU | S_IRWXG | S_IRWXO);

использовать remove() чтобы удалить файл либо в конце программы, либо в начале программы, чтобы убедиться, что он не существует при следующем его создании.