gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:28:52 24 4
gpt4 key购买 nike

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

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

最佳答案

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

If close() is interrupted by a signal that is to be caught, it shall return -1 with errno set to [EINTR] and the state of fildes is unspecified. If an I/O error occurred while reading from or writing to the file system during close(), it may return -1 with errno set to [EIO]; if this error is returned, the state of fildes is unspecified.

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

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

关于c - 如果 close(2) 因 EIO 而失败,文件描述符是否仍会被删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7297001/

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