Как проверить, связаны ли файловые указатели / дескрипторы / дескрипторы с тем же файлом / каналом / терминалом?

Содержание файла будет испорчено, если 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)

Это не работает для трубы / терминала, конечно.

Подобный способ проверить тот же файл в WinAPI.

1 ответ

Там нет стандартного способа определить, что на самом деле относится к FD. Также возможно, чтобы несколько FD ссылались на один и тот же файл, что происходит, когда dup(2) Семейство функций используются.

Также см. Получение имени файла из дескриптора файла в C

Другие вопросы по тегам