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