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

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

0

Решение

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector