ошибка 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()
чтобы удалить файл либо в конце программы, либо в начале программы, чтобы убедиться, что он не существует при следующем его создании.