我有一个案例,我有一个复杂消息的传入流,在将它们以简化格式传递给实际处理程序之前需要进行一些处理。
我想使用一个FIFO文件描述符,一个线程从一端填充它,另一个线程从另一端读取。现在我想要的那种行为:读取线程正在等待select()
,并且我想保证在唤醒时,有一个可以通过调用读取的完整包read()
,即我想避免重新组装由于缓冲区大小导致的碎片(包保证低于内核到用户空间缓冲区传递限制)。
我想知道是否有一种方法可以配置 FIFO,以便我可以手动定义文件描述符何时准备好,即当生产者成功编写完整包时,我想有一种方法可以向读取准备就绪的读取端(通过文件描述符)。有没有办法通过ioctl()
或者除了提供这种行为的FIFO之外还有一些抽象(在Linux世界中)?(我知道pthread
和条件变量,但我希望生产者和消费者之间的耦合仅限于共享文件描述符。)