2016-03-31 9 views
0

Dateiinhalt wird durcheinander gebracht, wenn stdout und stderr voll gepuffert sind und von der Shell in dieselbe Datei umgeleitet werden.Wie überprüft man, ob Dateizeiger/Deskriptoren/Handles derselben Datei/Pipe/Terminal zugeordnet sind?

Gibt es Möglichkeiten zu überprüfen, ob die zugrunde liegenden Dateien/Pipes/Terminals von Dateizeiger/Deskriptoren/Handles in C++ und Python identisch sind?

Die Pufferung sollte nur deaktiviert werden, wenn stdout und stderr in die gleiche Datei umgeleitet werden.

EDIT:
Danke für isedev's comment.

Diese Idee funktioniert auch in 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) 

Dies funktioniert natürlich nicht für Rohr/Terminal.

Similar way to check for the same file in WinAPI.

+1

dies helfen sollte: http://stackoverflow.com/questions/12502552/can-i-check-if-two-file-or-file-descriptor-numbers-refer-to- die gleiche Datei – isedev

Antwort

2

Es gibt keine Standardmethode, um zu bestimmen, auf was sich ein FD tatsächlich bezieht. Es ist auch möglich, dass sich mehrere FDs auf die gleiche Datei beziehen, was passiert, wenn die dup(2) Familie von Funktionen verwendet wird.

Siehe auch Getting Filename from file descriptor in C