mkfifo函数有两个参数,路径和模式。但我不知道它使用的路径的格式是什么。我正在编写一个小程序来创建命名管道并作为mkfifo
中的路径。例如,使用/home/username/Documents
,但它始终返回-1,并显示消息Error creating the named pipe.: File exists
。
我已经检查了很多次这个目录,里面没有管道。所以我想知道问题是什么。我在mkfifo中使用的模式是0666或0777。
答案 0 :(得分:6)
您提供了mkfifo()
现有目录的名称,因此出现了错误。您必须为其指定一个不存在的文件的名称,例如
mkfifo("/home/username/Documents/myfifo", 0600);
答案 1 :(得分:2)
mkfifo()
的'path'参数必须指定完整路径,目录和文件名。
因此,它将是:
char *myfifo="/home/username/Documents/mypipe";
mkfifo(myfifo, 0777);
作为旁注,你应该避免使用八进制权限位而是使用命名常量(来自sys/stat.h
),所以:
mkfifo(myfifo, S_IRWXU | S_IRWXG | S_IRWXO);
答案 2 :(得分:0)
使用remove()
在程序结束时或程序开始时删除文件,以确保在下次创建文件时它不存在。