gpt4 book ai didi

linux - 控制文件描述符的准备情况

转载 作者:太空宇宙 更新时间:2023-11-04 09:08:25 26 4
gpt4 key购买 nike

我有一个案例,我有一个传入的复杂消息流,在以简化格式传递给实际处理程序之前需要进行一些处理。

我想使用 FIFO 文件描述符,一个线程从一端填充它,另一个线程从另一端读取。现在我想要的行为是:读取线程正在等待 select(),我想保证在唤醒时,有一个完整的包可以通过调用读取到 read(),即我想避免由于缓冲区大小造成的碎片而不得不重新组装包(包保证低于内核到用户空间的缓冲区传递限制)。

我想知道是否有一种配置 FIFO 的方法,我可以手动定义文件描述符何时准备就绪,即当生产者成功编写完整包时,我想有一种方法向读取端(通过文件描述符)发出读取已准备就绪的信号。有没有一种方法可以通过 ioctl() 实现这一点,或者除了提供这种行为的 FIFO 之外是否有一些抽象(在 Linux 世界中)? (我知道 pthread 和条件变量,但我希望生产者和消费者之间的耦合仅限于共享文件描述符。)

最佳答案

尝试 socketpair()而不是 pipe()/mknod(S_IFIFO) .

可以在域 AF_UNIX 中创建一个套接字对,类型为 SOCK_STREAM(基于流,您的使用需要分帧/重组),SOCK_DGRAM(基于数据报,不会分片或合并),或 SOCK_SEQPACKET(基于记录,可能分片但不会合并)。

关于linux - 控制文件描述符的准备情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4739481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com