Wie lautet der Fachbegriff für das aktuelle (.) Und das übergeordnete (..) Verzeichnis?

3389
Max Truxa

Ich habe eine Funktion, die prüft, ob der übergebene Dateiname ist .oder ... Aber ich weiß nicht, wie ich es richtig benennen soll. So etwas IsCurrentOrParentDirectory()ist mehrdeutig, da die Funktion einen Dateinamen und keinen vollständigen Pfad annimmt. (Intuitiv würde ein Programmiererkollege erwarten, dass das Passieren /usr/während meines /usr/Aufenthalts zurückkehrt true, obwohl dies eigentlich nicht der Fall ist.)

Gibt es einen Fachbegriff für diese Verzeichniseinträge? Wenn es einen gibt, was ist es?

19
. und .. sind KEINE Dateinamen, sondern Ordner. Warum prüfen Sie nicht einfach, ob die Eingabe eine gültige Datei ist (Typ gemäß stat () ist IF_REG)? PS Dies ist wahrscheinlich eher für StackOverflow geeignet Tonny vor 10 Jahren 1
@Tonny `.` und` ..` * sind * Dateinamen gemäß dem POSIX-Standard. Sehen Sie mein Zitat unten. Ich würde sagen, es ist gut hier, da es um allgemeine Computer-Konzepte geht. slhck vor 10 Jahren 7
Ich muss zugeben, dass mein Wortlaut wieder mehrdeutig war. Die Funktion übernimmt einen einzelnen Datei- oder Verzeichnisnamen (`foo.bar`,` foo`, ...), jedoch keinen Pfad (`foo / bar`,` / foo / `, ...). Aber da Verzeichnisse, Links usw. auch Dateien sind, lasse ich es so. Max Truxa vor 10 Jahren 0
@slhck POSIX nennt es eine Datei, tut dies aber für ein beliebiges Dateisystemobjekt. Dateien in POSIX-Terminologie sollten normalerweise als Abkürzung für "Dateisystemobjekt" gelesen werden. In früheren Unix-Versionen wurden alle FSO-Dateien in der Tat wirklich Dateien abgelegt. Dies gilt jedoch nicht für einige moderne Implementierungen und sicherlich nicht für Nicht-Unix-Systeme, sondern für POSIX-kompatible Betriebssysteme (Windows NT als offensichtlichstes Beispiel). - Ich hätte wahrscheinlich schreiben sollen "ist eine reguläre Datei" anstelle von "gültige Datei" in meinem Kommentar, aber der Kommentar von Max Truxa macht es ohnehin zu einem Streitpunkt. Tonny vor 10 Jahren 0

5 Antworten auf die Frage

23
slhck

Aus dem POSIX-Standard :

Der spezielle Dateiname-Punkt soll sich auf das vom Vorgänger angegebene Verzeichnis beziehen. Der spezielle Dateiname dot-dot bezieht sich auf das übergeordnete Verzeichnis seines Vorgängerverzeichnisses. Als Sonderfall kann dot-dot im Stammverzeichnis auf das Stammverzeichnis selbst verweisen.

Wenn Sie also überprüfen möchten, ob der Dateiname der Name ist .oder ..Sie ihn anrufen müssten IsDotOrDotDot(), oder wenn Sie die POSIX-Terminologie der Pfadnamenauflösung verwenden IsPredecessorOrParentOfPredecessor(), oder vielleicht sogar PointsToPredecessorOrParentOfPrecedessor()…, dann haben Sie die Idee. Das Problem ist, dass die letztere Terminologie nur dann sinnvoll ist, wenn vollständige Pfadnamen betrachtet werden. Aber das würde sowieso niemand verstehen.

In Anbetracht dessen .und ..gültige Dateinamen (werden nur unterschiedlich interpretiert), sollten Sie sich an das halten, was Sie haben, und sich auf die Bedeutung verlassen, anstatt wie sie intern genannt werden.

Ist `.bash_history` Punkt oder nicht Punkt? Ich bin mir nicht sicher, ob dieser Funktionsname aussagekräftiger ist als das offene Öffnen des OP. Jens Erat vor 10 Jahren 0
@JensErat Das ist für das Problem irrelevant. Die Frage war, ob die Dateinamenskomponente "." Oder "..." war und nicht, ob sie gerade mit einem "." Begann. Natürlich ist der Funktionsname des OP aussagekräftiger; Ich habe ihn nur darauf hingewiesen, wie es technisch bezeichnet wird. slhck vor 10 Jahren 0
Sicher ist es, aber `IsDotOrDotDot ()` sagt so ziemlich nichts darüber aus, was die Funktion überhaupt macht. Jens Erat vor 10 Jahren 2
"Vorgänger" bezieht sich auf das Pfadelement unmittelbar davor in der Pfadangabe. Wenn Sie nur nach den Namen der Einträge in einem Verzeichnis suchen, ist "derzeit" oder "übergeordnet" die bessere Terminologie. Simon Richter vor 10 Jahren 0
@JensErat Ich würde `IsDotOrDotDot` verwenden. Jeder, der sich mit Dateisystemkonzepten auskennt, würde dies sofort verstehen. Es ist fraglich, ob ".bash_history" "Punkt" ist, da dann für die Bedeutung von "Punkt" kein Kontext angegeben wird, aber es ist definitiv NICHT "Punkt oder Punkt". kinokijuf vor 10 Jahren 2
@JensErat Quick check: Lesen Sie es für einen Moment genauso wie ich? "IsDotOrDotDot" ist nicht "IsDotOrNotDot". Für den zweiten Punkt stimme ich zu, ich hatte erwartet, dass es für Punktdateien wahr ist. Zum ersten, _if_ lese ich die Buchstaben so, wie sie da sind, es macht Sinn. Das heißt, ich mag die Wiederholung im Namen nicht sehr ... Izkata vor 10 Jahren 0
Warum nicht zwei Funktionen zur Verbesserung der Lesbarkeit? `IsDot ()` und `IsDotDot ()`. Plus, dann können Sie gezielt nach dem einen oder dem anderen suchen, wenn Sie es brauchen. Kai vor 10 Jahren 0
4
Jens Erat

.und ..werden normalerweise verwendet, um relative Pfade im Gegensatz zu absoluten Pfaden zu beschreiben /usr. Ich würde diesen Unterschied verwenden und die Funktion als deklarieren IsRelativeCurrentOrParentDirectory().

Beachten Sie, dass die Punktreferenzen an einer beliebigen Stelle im Pfad vorkommen können. Was ist /usr/local/..?

Ich habe nicht darauf hingewiesen, dass die Funktion nur einen Dateinamen und nicht einen vollständigen Pfad enthält. Ich habe die Frage entsprechend aktualisiert. Max Truxa vor 10 Jahren 0
2
Scott

Der POSIX-Standard, den ♦ ♦ sinnvoll zitiert hat, sagt:

Der spezielle Dateiname-Punkt muss sich auf… beziehen.  Der spezielle Dateiname-Punkt muss sich auf… beziehen.

(Betonung hinzugefügt). Obwohl es nicht gerade technisch ist, sieht es so aus, als ob "spezieller Dateiname" nur der offizielle Name sein könnte. Ihre Nutzer wäre es wahrscheinlich verstehen, wenn Sie Ihre Funktion eine der folgenden genannt: IsSpecialDirectory(), IsSpecialFilename()oder einfach IsSpecialName().

Oder Sie könnten gehen mit IsStandardDirectory(), IsStandardFilename()oder IsStandardName(). Dies folgt der Unix-Namenskonvention (Standardeingabe, Standardausgabe) für Dinge, die automatisch für Sie festgelegt werden (in diesem Fall durch mkfsund mkdir).  IsAutomatic…()oder IsDefault…()andererseits sind sie wahrscheinlich nicht intuitiv genug.

Der erste Name, den ich nahm, war `IsMagicDirectory () ', also ist das ziemlich nahe dran, aber ich denke, Ihre Formulierung ist viel intuitiver und angemessener (vor allem, da sie etablierte Namenskonventionen verwendet). Die Verwendung von `IsSpecialFileName` würde sogar deutlich machen, dass die Funktion keinen Pfad, sondern einen einzigen Dateinamen (oder Verzeichnis, Link usw.) erhält. Max Truxa vor 10 Jahren 0
Guter Vorschlag. "Special" würde aber wahrscheinlich auch Links, FIFOs etc. beinhalten, oder? slhck vor 10 Jahren 0
@slhck: Ja, Geräte (z. B. Festplatten und Laufwerke) werden als "Spezialdateien" bezeichnet. Und ja, der Begriff könnte lose auf symbolische Links, FIFOs und andere exotische Dateisystembenutzer angewendet werden - jede Art von Datei (i-node), die keine reguläre Datei ist. (Ja, Verzeichnisse fallen auch in diesen Bucket.) `IsSpecialFile ()` wäre also ein schlechter Vorschlag gewesen. Aber ich habe das nicht vorgeschlagen; Ich schlug vor, "IsSpecialFilename ()". Während die Namen "sda1", "console", "kmem", "myfifo" und "urandom" andeutend sind, sind sie nicht reserviert und von Natur aus nicht besonders. Aber "." Und "..." sind von Natur aus spezielle *** Dateinamen ***. Scott vor 10 Jahren 0
1
terdon

Der einzige Begriff, den ich aus der * nix-Welt kenne, ist CWDfür Current Working Directory. Das wird eigentlich oft gebraucht. Siehe z. B. /proc/$$/cwdeinen Link zu dem Verzeichnis, in dem Sie den Befehl ausführen.

Ich kenne keinen Standardnamen ..außer dot-dotund wie @slhck darauf hingewiesen hat, ist dies keine gute Wahl.

0
CodeOcelot

Posix ist ziemlich unklar, wenn es um die Beziehungen zwischen Eltern und Kind-Verzeichnissen geht. Wie andere gesagt haben, ist ./ ..nicht hilfreich, wenn man mit anderen Menschen spricht oder kommuniziert.

Dateistrukturen können als Baumdatenstruktur betrachtet werden. Hier genügen im Allgemeinen "Eltern" und "Kind" oder "Tochter", um Bedeutung zu vermitteln. Sie sehen, dass Datenstruktur-Lehrbücher diese Konvention tragen

Alternativ scheint es, als könnte über Bäume als "auf" und "ab" im Baum gesprochen werden. Konventionell bedeutet "auf" näher an das Stammverzeichnis, und "ab" bezieht sich auf das untergeordnete (ren).

Ich denke entweder IsCurrentOrUp()oder IsCurrentOrParent()kann als gute Praxis für die Benennung von Funktionen angesehen werden.