gpt4 book ai didi

pipe - 如果 I/O 函数不会因 EINTR 而失败,这是否意味着它永远不会阻塞?

转载 作者:行者123 更新时间:2023-12-05 01:19:38 25 4
gpt4 key购买 nike

例如,考虑 fdopen .我一直在想,如果文件描述符参数引用管道或套接字,是否有可能阻止它。谷歌搜索没有发现任何有用的东西。一方面,在我看来它不应该阻塞,因为它只是将流与文件描述符“关联”起来。另一方面,我想知道该实现是否具有在 fdopen 上预填充缓冲区的许可。调用,如果新打开的管道或套接字还没有可供读取的数据,则可能会阻塞。

可能的错误是 EMFILE , EBADF , EINVAL , 和 ENOMEM .我假设任何阻塞 I/O 函数都可能被信号中断,所以如果可能的话 fdopen阻止,然后 EINTR也将作为可能的错误给出。既然事实并非如此,我可以假设 fdopen从不阻塞?这是否也适用于其他 I/O 功能?

最佳答案

fdopen() 是一个 libc 调用,它使用各种系统调用(如 fcntl())来检查文件的状态。与 fdopen() 返回的内容相比,这些系统调用可以阻止和/或返回额外的错误代码。例如, fcntl() 可以阻塞并返回 EINTR。 fdopen() 的实现透明地处理可恢复的错误条件。

最重要的是, fdopen() 可以阻塞,因为它至少使用了一个阻塞系统调用。相同的推理适用于其他与 I/O 相关的 libc 函数。

关于pipe - 如果 I/O 函数不会因 EINTR 而失败,这是否意味着它永远不会阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30007368/

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