我想知道是否有Windows对应Linux的mkfifo。对于对应,我的意思是创建文件的方法,使用st_mode S_IFIFO。
谢谢回答。
我想知道是否有Windows对应Linux的mkfifo。对于对应,我的意思是创建文件的方法,使用st_mode S_IFIFO。
谢谢回答。
在某种程度上,可以模拟mkfifo
的行为。我很多年前为类似于WinXX的OS/2实现了这样的功能。
主要限制是Windows为管道使用保留文件名:\\.\pipe\pipename或者\\servername\pipe\pipename(在网络上非常有用)。 但是,你无法直接使用任意fifo名称。管道名称需要加上 \\.\pipe\ 前缀。
然而,一个应用程序可以使用 CreateNamedPipe
创建具有 PIPE_ACCESS_DUPLEX
和 GUID 名称的管道,并使用 DeviceIoControl
/ FSCTL_SET_REPARSE_POINT
在目标目录中创建该管道的符号链接。这应该与 mkfifo
很接近。
缺点是服务管道的应用程序必须在管道实例存在期间运行。当然,它应该在终止时清理符号链接。 此外,它需要从管道中读取所有数据并将其再次写回。不确定是否可以使用零拷贝来实现。
还有一些其他方面。例如,如果您想能够删除您模拟的FIFO,则需要跟踪符号链接的删除并在这种情况下终止工作进程。
很抱歉,我没有Windows开发环境,无法测试这种方法。
`> fsutil file createnew fifo 0
> fsutil file createnew socket 1
> attrib +S -H fifo
> attrib +S -H socket`
- Patrik Polakovic