Ich habe ein Programm, das zwei Dateinamen als Argumente akzeptiert: Es liest die erste Datei, um die zweite Datei zu erstellen. Wie kann ich sicherstellen, dass das Programm die erste Datei nicht überschreibt?
Einschränkungen:
Am besten verwenden Sie keine Dateinamen als Identitäten. Wenn Sie die Datei zum Lesen öffnen, sperren Sie sie stattdessen mit dem von Ihrem Betriebssystem unterstützten Mechanismus. Wenn Sie dann die Datei zum Schreiben öffnen, sperren Sie sie auch - wenn die Sperre fehlschlägt, melden Sie einen Fehler.
Wenn möglich, öffnen Sie die erste Datei schreibgeschützt ( O_RDONLY ) in LINUX. Wenn Sie dann versuchen, es erneut zu öffnen, um darauf zu schreiben, erhalten Sie einen Fehler.
Vielleicht könnten Sie die Funktion system () verwenden, um einige Shell-Befehle aufzurufen?
In bash würden Sie einfach anrufen:
%Vor%Dies zeigt die Inode-Nummer einer Datei an. Sie können zwei Dateien auf diese Weise vergleichen und wenn ihre Inodes identisch sind, bedeutet dies, dass sie harte Links sind. Der folgende Anruf:
%Vor%zeigt den Namen der Datei an, und wenn es sich um einen symbolischen Link handelt, wird auch der Dateiname gedruckt, mit dem der Link verknüpft ist. Es gibt nur einen Namen aus, auch wenn die Datei, auf die es verweist, feste Links hat. Um den symbolischen Link zu überprüfen, müssten die Inode-Nummern für die zweite Datei und die Datei, zu der die symbolischen Links gehören, verglichen werden.
Sie könnten die stat-Ausgabe in eine Textdatei umleiten und dann die Datei in Ihrem Programm analysieren.
Tags und Links c