C:使用mknod()创建命名管道不起作用



语言: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,您仍然必须在两端打开它以获得数据传输。

相关内容

  • 没有找到相关文章

最新更新