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

Другие вопросы по тегам