gpt4 book ai didi

C、检测fread是否会阻塞

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

在 C 中,有没有办法检测对 libc 的 fread 的调用是否会阻塞?我想从文件描述符中读取数据,但前提是它可用。我正在使用 GNU+Linux,但我正在编写一个库,所以我正在寻找尽可能便携的解决方案。

最佳答案

假设文件指针指向一个非常规文件,并且大概是用 fdopen() 创建的,一个解决方案是从 fread() 切换到 read() 并使用 select() 检查套接字是否会阻塞。这对于当今所有的类 Unix 系统都是可移植的。

如果您的库接收到一个文件指针并且必须始终使用它(因为 API 要求它),则上述方法将不起作用,并且在底层文件描述符上调用 select 也不会起作用。问题在于,由于缓冲,fread() 可能根本不会调用底层的 read(),或者它可能会多次调用它。在这种情况下,唯一可移植的解决方案是在单独的线程中使用阻塞 fread(),并在读取完成时通知实现 API 的线程。

关于C、检测fread是否会阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976719/

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