Как проверить, связаны ли файловые указатели / дескрипторы / дескрипторы с тем же файлом / каналом / терминалом?
Содержание файла будет испорчено, если stdout
а также stderr
полностью буферизируются и перенаправляются оболочкой в один и тот же файл.
Есть ли способы проверить, совпадают ли базовые файлы / каналы / терминалы файловых указателей / дескрипторов / дескрипторов в C++ и Python?
Буферизация должна быть отключена, только если stdout
а также stderr
перенаправлены в тот же файл.
РЕДАКТИРОВАТЬ:
Спасибо за комментарий Иседева.
Эта идея также работает в 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)
Это не работает для трубы / терминала, конечно.
1 ответ
Там нет стандартного способа определить, что на самом деле относится к FD. Также возможно, чтобы несколько FD ссылались на один и тот же файл, что происходит, когда dup(2)
Семейство функций используются.