Содержимое файла будет испорчено, если stdout
и stderr
полностью заполнены буфером и перенаправлены в тот же файл оболочкой.Как проверить, связаны ли указатели файлов/дескрипторы/дескрипторы с одним и тем же файлом/трубой/терминалом?
Есть ли способы проверить, являются ли лежащие в основе файлы/трубы/терминалы указателей/дескрипторов/дескрипторов файлов одинаковыми в C++ и Python?
Буферизация должна быть отключена, только если stdout
и stderr
перенаправлены на тот же файл.
EDIT:
Спасибо за 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.
это должно помочь: http://stackoverflow.com/questions/12502552/can-i-check-if-two-file-or-file-descriptor-numbers-refer-to- -же-файл – isedev