mkfifo() error ---> "Ошибка создания именованного канала. Файл существует"
Функция mkfifo принимает 2 аргумента, путь и режим. Но я не знаю, каков формат пути, который он использует. Я пишу небольшую программу для создания именованного канала и как путь в mkfifo
, С помощью /home/username/Documents
например, но всегда возвращает -1 с сообщением Error creating the named pipe.: File exists
,
Я проверял этот каталог много раз, и внутри него нет трубы. Поэтому мне интересно, в чем проблема. Режим, который я использую в 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()
удалить файл либо в конце программы, либо в начале программы, чтобы убедиться, что он не существует при следующем создании.