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