7

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

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

4

2 回答 2

8

您给出mkfifo()现有目录的名称,因此出现了错误。您必须给它一个不存在的文件的名称,例如

mkfifo("/home/username/Documents/myfifo", 0600);
于 2012-10-23T22:07:01.410 回答
2

'path' 参数mkfifo()必须指定完整路径、目录和文件名。

因此,它将是:

char *myfifo="/home/username/Documents/mypipe";

mkfifo(myfifo, 0777);

作为旁注,您应该避免使用八进制权限位并改用命名常量(来自sys/stat.h),所以:

mkfifo(myfifo, S_IRWXU | S_IRWXG | S_IRWXO);
于 2012-10-23T22:08:21.727 回答