Tag: named pipes

为什么只读打开一个命名pipe道块?

在使用Python处理各种UNIX(Linux,FreeBSD和MacOS X)命名pipe道(FIFOs)时,我注意到了一些奇怪的地方。 第一个,也许是最烦人的是试图打开一个空/空闲的FIFO只读将阻塞(除非我使用os.O_NONBLOCK与os.open()调用较低级别)。 但是,如果我打开它的读/写,那么我没有阻止。 例子: f = open('./myfifo', 'r') # Blocks unless data is already in the pipe f = os.open('./myfifo', os.O_RDONLY) # ditto # Contrast to: f = open('./myfifo', 'w+') # does NOT block f = os.open('./myfifo', os.O_RDWR) # ditto f = os.open('./myfifo', os.O_RDONLY|os.O_NONBLOCK) # ditto 我只是好奇,为什么。 为什么打开的调用块,而不是一些后续的读取操作? 另外我注意到一个非阻塞文件描述符可以在Python中performance出不同的行为。 在os.open()和os.O_NONBLOCK用于初始打开操作的情况下,如果文件描述符中的数据没有准备好, os.read()似乎会返回一个空string。 但是,如果我使用fcntl.fcnt(f.fileno(), fcntl.F_SETFL, fcntl.GETFL […]

如何从Java打开一个Windows命名pipe道?

在我们的Linux系统上,我们使用命名pipe道进行进程间通信(生产者和消费者)。 为了testing消费者(Java)代码,我想实现(在Java中)虚拟生产者,它写入到连接到消费者的命名pipe道。 现在testing也应该在Windows开发环境中工作。 因此,我想知道如何从Java创build一个Windows命名pipe道。 在Linux中,我可以使用mkfifo(使用Runtime.exec()调用),但是我应该如何在Windows上执行此操作?