【问题标题】:mkfifo() creating file goes wrongmkfifo() 创建文件出错
【发布时间】:2021-12-09 09:23:27
【问题描述】:

我正在学习命名管道。当我执行mkfifo() 时,什么也没有发生,我的文件夹中没有额外的文件可以写入或读取。有什么建议吗?

#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    mkfifo("C:\\Users\\name\\Documents\\codes", 0666);
}

【问题讨论】:

  • mkfifo 返回一个状态。您可以使用 perror() 查看实际错误是什么。 int s = mkfifo(...); if(s&lt;0){ perror("mkfifo error:");} 也是如此
  • 我认为 Windows 不支持命名管道。
  • @Shawn:事实上 Windows 可以(我也使用过),但它们不能出现在 NTFS 文件系统上。

标签: c windows pipe named-pipes fifo


【解决方案1】:

不可能在任何默认的 Windows 文件系统上创建命名管道;如果您愿意,0666 也不是正确的权限。对此类函数的可移植调用使用符号常量,这些常量在不同的操作系统上执行不同的值,但我离题了。

如果您需要 Windows 上的命名管道,您可以调用 CreateNamedPipe。这实际上导致了一条您理论上可以交给另一个程序的路径。但是 Windows 上的管道有点特殊,不应该交给需要文件的程序。因此,显而易见的方法是正确的方法,告诉程序打开命名管道并为其命名以传递给 CreateNamedPipe 本身。如果程序不期望命名管道,即使您将其作为打开文件句柄传递,它也很可能无法工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2016-10-28
    • 2018-08-17
    • 2014-06-18
    • 1970-01-01
    相关资源
    最近更新 更多