我想知道Linux mkfifo是否有Windows等价物。相当于我的意思是使用 st_mode S_IFIFO 创建文件的方式。 谢谢你的回答。
答案 0 :(得分:3)
应该可以在某种程度上模仿mkfifo
行为 。我已经为OS / 2多年前实现了类似的东西类似于文件系统的WinXX。
主要限制是Windows对管道使用保留文件名: \\。\ pipe \ pipename 或 \\通过网络 servername \ pipe \ pipename (这可能非常有用)。 但你将无法直接使用任意的fifo名称。管道名称需要\\。\ pipe \ prefix。
但是,应用程序可以创建一个CreateNamedPipe
与PIPE_ACCESS_DUPLEX
的管道,例如GUID名称和使用DeviceIoControl
/ FSCTL_SET_REPARSE_POINT
在目标目录中创建指向此管道的符号链接。这应该非常接近mkfifo
。
缺点是只要管道实例存在,为管道提供服务的应用程序必须运行。当然,它应该在终止时清理符号链接。 此外,它需要从管道中读取所有数据并再次将其写回。不确定这是否可以零拷贝实现。
还有一些方面。例如。如果您希望能够删除模拟FIFO,则需要跟踪删除符号链接并在此情况下终止工作进程。
对不起,我没有Windows开发环境,所以我无法测试这种方法。