Unix 管道编写器可以判断读卡器何时阻塞吗?

Unix 管道编写器可以判断读卡器何时阻塞吗?,unix,ipc,pipe,Unix,Ipc,Pipe,当读卡器(位于不同的进程中)试图从管道中读取而管道当前为空时,正在写入管道的进程是否能够告知它何时阻塞 如果管道无法实现这一点,是否可以采用其他形式的IPC 我怀疑答案是否定的,但我想我还是会问 这种情况的用例是仅当读卡器确实需要数据时才写入管道。据我所知,不可能直接写入管道(仅使用管道)。即使您知道管道缓冲区的大小(您可以通过调用fpathconf(pipefds[0],\u PC\u pipe\u BUF)),并且您知道它是空的,但仍然无法保证另一个进程实际上正在读取它。即使它正在读取,也可

当读卡器(位于不同的进程中)试图从管道中读取而管道当前为空时,正在写入管道的进程是否能够告知它何时阻塞

如果管道无法实现这一点,是否可以采用其他形式的IPC

我怀疑答案是否定的,但我想我还是会问


这种情况的用例是仅当读卡器确实需要数据时才写入管道。

据我所知,不可能直接写入管道(仅使用管道)。即使您知道管道缓冲区的大小(您可以通过调用
fpathconf(pipefds[0],\u PC\u pipe\u BUF))
,并且您知道它是空的,但仍然无法保证另一个进程实际上正在读取它。即使它正在读取,也可以在非阻塞模式下执行。您可以尝试找出另一个进程在某些系统调用(例如read)时是否阻塞,但即使这样也没有帮助(另一个进程此时可能正在读取其他内容)


我想到的唯一方法是使用进程信号量。这要求另一个进程(例如子进程)确切地知道要使用哪个信号量以及如何使用它。您可以测试samaphore是否已锁定。

管道的大小(例如Linux上的64Kb)。填充管道后,写入程序会阻塞,因此在不需要数据时不会写入。问题的关键是,除非需要数据,否则我甚至不想填充管道。