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

时间:2016-03-31 00:00:01

标签: python c++ io-redirection buffering

如果stdoutstderr已完全缓冲并由shell重定向到同一文件,文件内容将会混乱。

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

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

编辑:
谢谢isedev's comment

这个想法也适用于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)

当然,这对管道/终端不起作用。

Similar way to check for the same file in WinAPI

1 个答案:

答案 0 :(得分:2)

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

另见Getting Filename from file descriptor in C

相关问题