QNX (Neutrino 6.5.0) verwendet eine Open-Source-Implementierung von ksh als Shell. Viele der zur Verfügung gestellten Skripten, einschließlich der Systemstartskripts, konstruiert Verwendung wieUnterschied zwischen "Test -a-Datei" und "Test-Datei -ef-Datei"
if ! test /dev/slog -ef /dev/slog; then
# do something
fi
zu prüfen, ob ein Ressourcenmanager oder nicht im Dateisystem vorhanden ist. Ich habe gesucht und konnte nur sehr dray Erklärungen finden, die -ef
prüft, um zu sehen, ob die beiden Parameter in der Tat die gleiche Datei sind. Da der angegebene Dateiname derselbe ist, scheint er sich auf die Überprüfung zu beschränken, dass die Datei existiert.
Ich habe das Verhalten von test -a
und test -e
überprüft (beide scheinen nach Datei Existenz jeder Art von Datei nach den verschiedenen Dokumenten, die ich gelesen habe zu überprüfen) und sie scheinen auch zu arbeiten.
Gibt es Unterschiede bei den durchgeführten Prüfungen zwischen -ef
und -a
/-e
? Verwendet -ef
eine Art von Versuch, gegen eine Race-Bedingung in der Existenz der Datei zu schützen?
Es scheint, als könnte es in der Tat überprüfen, dass die Datei für zwei verschiedene stat() -Aufrufe existiert. Wird der Eintrag/dev vom Treiber/Manager (z. B. nach dem Herunterfahren) nur entfernt, wenn jemand nach seiner Existenz sucht? – jhfrontz
@jhfrontz: Ich bin nicht ganz sicher, was Sie meinen, aber (als Beispiel) das/dev/slog Pseudogerät wird nur entfernt, wenn der Fahrer getötet wird, was normalerweise nicht in der Mitte des Aufrufs zu "testen" da passieren würde Es ist Teil des ersten Systemstartskripts. Im normalen Fall von/dev/slog kann ein Prozess auf das Gerät schreiben, um sich in einer Datei/Konsole/Speicher einzuloggen, und während es mit einem anderen Dateinamen enden kann, sollte das in/dev angezeigte Gerät dasselbe sein wie vor dem schreibe nach/dev/slog. – tinman
Ich spekuliere, dass das Stat'ing des Gerätes einige Nebeneffekte hat (zB, den Fahrer/Manager aufzufordern, irgendeine Art von Hauswirtschaft zu machen), so wie der erste stat() Aufruf (von 'test') abgeschlossen ist, die Datei/Das Gerät wird vom Treiber entfernt/ersetzt - was dazu führt, dass der zweite stat() verschiedene Informationen erhält, die wiederum zum "Test" führen. Es ist schon eine Weile her, seit ich QNX benutzt habe, aber [die Slogger-Manpage] (http: //www.qnx.com/developers/docs/6.3.0SP3/neutrino/utilities/s/slogger.html) schlägt vor, dass es bei der Interaktion mit/dev/slog Nebenwirkungen gibt (z. B. wird die Verknüpfung aufgehoben, wenn das Protokoll gelöscht wird). – jhfrontz