mkfifo()错误---> “创建命名管道时出错:文件存在”

时间:2012-10-23 22:01:54

标签: c systems-programming mkfifo

mkfifo函数有两个参数,路径和模式。但我不知道它使用的路径的格式是什么。我正在编写一个小程序来创建命名管道并作为mkfifo中的路径。例如,使用/home/username/Documents,但它始终返回-1,并显示消息Error creating the named pipe.: File exists

我已经检查了很多次这个目录,里面没有管道。所以我想知道问题是什么。我在mkfifo中使用的模式是0666或0777。

3 个答案:

答案 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()在程序结束时或程序开始时删除文件,以确保在下次创建文件时它不存在。