语言:CUbuntu操作系统:
我只是想创建一个FIFO命名管道使用命令:
state = mknod("pipe.txt", S_IFIFO | 0666, 0);
问题是我总是得到状态值为-1(意味着它已经失败)而不是0。
错误返回'pipe.txt: File exists'
我不知道我应该如何调试这样的问题或什么可能是原因,希望任何人的代码指导我什么是错的。
(注意:pipe.txt文件与源文件在同一路径上)
Read: int mknod(const char *path, mode_t mode, rdev_t dev_identifier);
<一般描述/strong>:
使用path参数中指定的路径名创建一个新的字符特殊文件或FIFO特殊文件(命名管道)。
如果文件已经存在,那么它将失败,错误:File exists
为了避免这个错误,删除(unlink()
)文件,就像我在下面的代码中所做的那样(阅读注释):
int main() {
char* file="pipe.txt";
unlink(file); // Add before mknod()
int state = mknod(file, S_IFIFO | 0666, 0);
if(state < 0){
perror("mknod() error");
}
return 0;
}
您应该检查errno
,看看错误是什么,但它可能是EEXIST
,因为我相信,如果文件已经存在,会发生什么。
mknod
的Linux文档:
如果pathname已经存在,或者是一个符号链接,则调用失败并返回EEXIST错误。
但是,如果该文件已经存在,并且是您在先前运行中创建的管道,则可以安全地重新打开它。所有mknod
(及其通常首选的表兄弟,mkfifo
)实际上是创建 FIFO,您仍然必须在两端打开它以获得数据传输。