首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果close(2)失败并返回EIO,文件描述符是否仍会被删除?

如果close(2)失败并返回EIO,文件描述符是否仍会被删除?
EN

Stack Overflow用户
提问于 2011-09-04 10:06:29
回答 1查看 2K关注 0票数 20

如果close(2)系统调用因EIO而失败,文件描述符是否仍会被删除?

如果是,是否不能通过稍后重试来处理伪IO错误?如果不是,应该如何防止文件描述符泄漏?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-04 14:46:48

这是一个棘手的问题。然而,POSIX标准在对close()的描述中确实涵盖了它

如果close()被要捕获的信号中断,它将返回-1,错误号设置为EINTR,文件状态未指定。如果在close()期间从文件系统读取或写入文件系统时发生I/O错误,则可能会返回-1,并将errno设置为EIO;如果返回此错误,则fildes的状态为未指定。

因此,标准未指定文件描述符的状态。

对于大多数实际用途,它是关闭的;即使文件描述符是正式打开的,您也几乎不能对它做什么。您可以尝试一个无害的操作(如fcntl()F_GETFL),并查看是否返回了EBADF,这表明描述符已正式关闭。但是,如果它是打开的,并且EIO错误的原因是永久性的,那么每次您尝试使用它做任何事情(可能包括fcntl()调用)时,都可能得到EIO。您可能会也可能永远不会得到另一个类似打开的操作返回的相同描述符。如果死文件描述符是打开但不可关闭的,那么即使是dup2()也不清楚是否可以成功地将该死文件描述符指定为目标。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7297001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档