有没有一种使用Go语言创建unix FIFO的方法?尽管我期望在posix操作系统中命名FIFO被广泛使用,但os
包中没有Mkfifo
或Mknod
。实际上,有一个用于创建无名FIFO(管道)的函数,但没有用于创建命名管道的函数。
难道只有我需要它们吗?
为了在Linux上让它工作,我只需要执行了
syscall.Mknod(fullPath, syscall.S_IFIFO|0666, 0)
看起来这个方法似乎能起到作用。
这里提供了底层的mknod()调用的参考文献。
有一个Mkfifo
,但它在syscall
包中 :)
通过源代码搜索,我感觉它只适用于OS X和FreeBSD: http://www.google.com/codesearch#search&q=Mkfifo+package:http://go%5C.googlecode%5C.com
我没有准备好进行测试的Unix机器。如果您想构建一个C接口包并为其导出,则可以使用cgo
。
syscall.Mkfifo
(以及unix.Mkfifo
)现在已经存在于Go支持的大多数操作系统中(值得注意的例外是Windows和Plan9)。此外,应优先使用syscall
或golang.org/x/sys/unix
(带有适当的构建约束条件),而不是cgo
。 - Dave C