如何检查文件指针/描述符/句柄是否关联到同一个文件/管道/终端

How to check if file pointers/descriptors/handles are associated to the same file/pipe/terminal?

本文关键字:文件 关联 句柄 是否 终端 管道 同一个 描述 检查 指针 何检查      更新时间:2023-10-16

如果stdoutstderr被shell完全缓冲并重定向到同一个文件,则文件内容将被打乱。

在C++和Python中,是否有方法检查文件指针/描述符/句柄的底层文件/管道/终端是否相同?

只有当stdoutstderr重定向到同一文件时,才应禁用缓冲。

编辑:
感谢isedev的评论。

这个想法也适用于Python 3.4。

def same_file(file1, file2):
    stat1, stat2 = os.fstat(file1.fileno()), os.fstat(file2.fileno())
    return (stat1.st_dev == stat2.st_dev) and (stat1.st_ino == stat2.st_ino)

这当然不适用于管道/终端。

在WinAPI中检查相同文件的类似方法。

没有标准的方法来确定FD实际指的是什么。也可以让多个FD引用同一个文件,这就是使用dup(2)函数族时发生的情况。

另请参阅从C 中的文件描述符获取文件名