我有文件描述符,在我的信号处理程序中,我关闭了文件。但由于其他情况,该文件可能已提前关闭。有没有办法检查文件描述符是否指向 c 和 linux 中打开的文件?
更新: 是否可以确定与文件描述符关联的文件名?这样,如果 fd 被回收,应用程序可以检测到它。
最佳答案
尝试对文件描述符执行任何文件操作,如 lseek
。如果它返回 -1
。然后检查errno
,如果是EBADF
则文件描述符已经关闭。
尝试以不受影响的方式执行 lseek
,如下所示。
lseek(fd, 0, SEEK_CUR);
通常在程序中打开第一个文件时,我们总是得到文件描述符 3
。关闭此文件后,如果我们尝试打开其他文件,我们将获得与 3
相同的文件描述符。因为我们总是会得到最低的可用数字。如果我们在一个程序中关闭和重新打开许多文件,那么我们需要改进我们的代码来跟踪文件描述符列表以检查它是否已关闭。
关于c - 如何检查文件是否关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343851/