我有一種情況,我有一個複雜消息的傳入流,它們在以簡化格式傳遞給實際處理程序之前需要進行一些處理。控制文件描述符的準備
我想使用一個FIFO文件描述符,一個線程從一端填充它,另一個線程從另一端讀取。現在我想要的那種行爲:閱讀線程正在等待select()
,我想保證在喚醒時有一個完整的包,可以通過調用read()
來讀取,即我想避免由於緩衝區大小而導致碎片重新組裝(軟件包保證低於內核到用戶空間的緩衝區傳遞限制)。
我想知道是否有一種配置FIFO的方式,以便我可以手動定義文件描述符何時準備就緒,即生產者已成功編寫完整軟件包時,我想要有一個向讀取結束(通過文件描述符)發送信號的方式是讀取已準備就緒。有沒有一種方法可以通過ioctl()
來實現,或者除了提供這種行爲的FIFO之外還有一些抽象(在Linux世界中)? (我知道pthread
和條件變量,但我想生產者和消費者之間的耦合被限制到共享文件描述。)