2016-03-31 4 views
0

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

+1

это должно помочь: http://stackoverflow.com/questions/12502552/can-i-check-if-two-file-or-file-descriptor-numbers-refer-to- -же-файл – isedev

ответ

2

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

Также см Getting Filename from file descriptor in C

 Смежные вопросы

  • Нет связанных вопросов^_^