c - 如何检查文件是否关闭

标签 c linux

我有文件描述符,在我的信号处理程序中,我关闭了文件。但由于其他情况,该文件可能已提前关闭。有没有办法检查文件描述符是否指向 c 和 linux 中打开的文件?

更新: 是否可以确定与文件描述符关联的文件名?这样,如果 fd 被回收,应用程序可以检测到它。

最佳答案

尝试对文件描述符执行任何文件操作,如 lseek。如果它返回 -1。然后检查errno,如果是EBADF则文件描述符已经关闭。

尝试以不受影响的方式执行 lseek,如下所示。

lseek(fd, 0, SEEK_CUR);

通常在程序中打开第一个文件时,我们总是得到文件描述符 3。关闭此文件后,如果我们尝试打开其他文件,我们将获得与 3 相同的文件描述符。因为我们总是会得到最低的可用数字。如果我们在一个程序中关闭和重新打开许多文件,那么我们需要改进我们的代码来跟踪文件描述符列表以检查它是否已关闭。

关于c - 如何检查文件是否关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14343851/

相关文章:

c - 从C中的缓冲区读取值

c - 目录条目和链表

c - 当N是C的输入并且也由输入函数定义时,如何在C中定义变量 “N”类型(N将提示用户输入)

linux - 为什么 "mycommand >>file1 >>file2"不附加到两个文件?

linux - Linux 上/proc/cpuinfo 中的 bug 是什么意思?

将字符串数组中的值连接到 c 中的另一个静态字符串

c - apache 对 update/var/www 文件夹的写入权限

Python 不识别软链接(soft link)变化

php - 将 Codeception 供应商路径与 Linux 链接起来

regex - 在 Linux 中使用 regex 和 grep 查找文件中的字符串