Was ist der Fachbegriff für das aktuelle (.) Und übergeordnete (..) Verzeichnis?

20

Ich habe eine Funktion, die prüft, ob der übergebene Dateiname .oder ist ... 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 Programmierkollege erwarten, dass er /usr/während meiner /usr/Rückkehr verstirbt true, obwohl dies eigentlich nicht der Fall ist.)

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

Max Truxa
quelle
1
. und .. sind KEINE Dateinamen, sondern Ordner. Warum prüfen Sie nicht einfach, ob die Eingabe eine gültige Datei ist (Typ laut stat () ist IF_REG)? PS Dies ist wahrscheinlich besser geeignet für StackOverflow
Tonny
7
@Tonny .und .. sind Dateinamen nach dem POSIX-Standard. Siehe mein Zitat unten. Ich würde sagen, dass es hier in Ordnung ist, da es um allgemeine Computerkonzepte geht.
Slhck
Ich muss zugeben, dass meine Formulierung wieder mehrdeutig war. Die Funktion nimmt eine einzelne Datei oder Verzeichnisnamen ( foo.bar, foo, ...) , aber keinen Pfad ( foo/bar, /foo/, ...). Aber da Verzeichnisse, Links usw. auch Dateien sind, lasse ich es so.
Max Truxa
@slhck POSIX nennt es eine Datei, tut dies jedoch für JEDES Dateisystemobjekt. Datei in POSIX-Terminologie sollte normalerweise als Abkürzung für "Dateisystemobjekt" gelesen werden. In frühen Unix und es leitet alle FSOs tatsächlich Dateien ab, aber das gilt nicht für einige moderne Implementierungen und schon gar nicht für Nicht-Unix-, aber POSIX-kompatible Betriebssysteme (Windows NT als naheliegendstes Beispiel). - Ich hätte wahrscheinlich in meinem Kommentar schreiben sollen, dass "eine reguläre Datei" statt "eine gültige Datei" ist, aber der Kommentar von Max Truxa macht es trotzdem zu einem strittigen Punkt.
Tonny

Antworten:

23

Aus dem POSIX-Standard :

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

Also wirklich, wenn Sie überprüfen möchten, ob der Dateiname ist .oder ob ..Sie ihn aufrufen müssen IsDotOrDotDot(), oder wenn Sie die POSIX-Terminologie der Pfadnamenauflösung verwenden IsPredecessorOrParentOfPredecessor(), oder vielleicht sogar PointsToPredecessorOrParentOfPrecedessor()... Sie haben die Idee. Das Problem ist, dass die letztere Terminologie nur bei der Betrachtung vollständiger Pfadnamen Sinn macht. Aber das würde sowieso niemand verstehen.

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

slhck
quelle
Ist .bash_historyPunkt oder nicht Punkt? Ich bin nicht sicher, ob dieser Funktionsname aussagekräftiger ist als das vom OP vorgeschlagene Öffnen.
Jens Erat
@JensErat Das ist für das Problem irrelevant. Die Frage war, ob die Dateinamenkomponente .oder ..war und nicht, ob sie gerade mit a begann .. Natürlich ist der Funktionsname des OP aussagekräftiger. Ich habe ihn nur darauf hingewiesen, wie es technisch gemeint ist.
Slhck
2
Klar ist es, IsDotOrDotDot()sagt aber so ziemlich nichts darüber aus, was die Funktion überhaupt macht.
Jens Erat
"Vorgänger" bezieht sich auf das Pfadelement unmittelbar davor in der Pfadangabe. Wenn Sie sich nur die Namen der Einträge in einem Verzeichnis ansehen, ist "current" oder "parent" die bessere Terminologie.
Simon Richter
2
@ JensErat würde ich verwenden IsDotOrDotDot. Jeder, der sich mit Dateisystemkonzepten auskennt, würde es sofort verstehen. Es ist fraglich, ob .bash_history"Punkt" ist, da dann für die Bedeutung von "Punkt" kein Kontext bereitgestellt wird, aber es ist definitiv NICHT "Punkt oder Punktpunkt".
Kinokijuf
4

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

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

Jens Erat
quelle
Ich habe nicht darauf hingewiesen, dass die Funktion nur einen Dateinamen und keinen vollständigen Pfad verwendet. Ich habe die Frage entsprechend aktualisiert.
Max Truxa
2

Der POSIX-Standard, der sinnvollerweise zitiert wird, besagt:

Der spezielle Dateinamenpunkt bezieht sich auf….  Der spezielle Dateiname Punkt-Punkt bezieht sich auf….

(Betonung hinzugefügt). Also, obwohl es nicht gerade technisch ist , sieht es so aus, als ob "spezieller Dateiname" 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 für Sie automatisch festgelegt wurden (in diesem Fall von mkfsund mkdir).  IsAutomatic…()oder IsDefault…()andererseits sind wahrscheinlich nicht intuitiv genug.

Scott
quelle
Eigentlich war der Vorname, den ich gewählt IsMagicDirectory()habe, ziemlich nah daran, aber ich denke, Ihr Wortlaut ist viel intuitiver und angemessener (vor allem, da er festgelegte Namenskonventionen verwendet). Die Verwendung von IsSpecialFileNamewürde sogar klarstellen, dass die Funktion keinen Pfad, sondern einen einzelnen Dateinamen (oder Verzeichnis-, Link-, usw.) erhält.
Max Truxa
Guter Vorschlag. "Special" würde aber wohl auch Links, FIFOs etc. beinhalten, oder?
Slhck
@slhck: Ja, Geräte (z. B. Festplatten und ttys) heißen "Sonderdateien". Und ja, der Begriff könnte lose auf symbolische Links, FIFOs und andere exotische Bewohner des Dateisystems angewendet werden - jede Art von Datei (i-node), die keine „reguläre Datei“ ist. (Ja, auch Verzeichnisse fallen in diesen Eimer.) Wäre IsSpecialFile()also ein schlechter Vorschlag gewesen. Aber das habe ich nicht vorgeschlagen; Schlug ich vor IsSpecialFilename(). Während die Namen sda1, console, kmem, myfifound urandomsuggestiv sind, sind sie nicht reserviert und sind nicht von Natur aus besonders. Aber .und ..sind von Natur aus spezielle Dateinamen .
Scott
1

Der einzige Begriff, den ich aus der * nix-Welt kenne, ist CWDCurrent Working Directory. Das wird eigentlich ziemlich oft benutzt. B. nach, /proc/$$/cwdwelches ein Link zu dem Verzeichnis ist, von dem aus Sie den Befehl ausführen.

Ich weiß nicht , von jedem Standard - Namen für ..abgesehen von dot-dotund als @slhck wies darauf hin , das ist keine gute Wahl.

terdon
quelle
0

Posix ist ziemlich zweideutig, wenn es um Eltern-Kind-Verzeichnisbeziehungen geht. Wie andere gesagt haben, ./ ..ist nicht hilfreich , während sie mit anderen Menschen zu sprechen oder zu kommunizieren.

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

Alternativ scheint es, als könnten Bäume als "auf" und "ab" des Baumes bezeichnet werden. Konventionell bedeutet "up" näher am Stammverzeichnis und "down" bezieht sich auf das Kind (die Kinder).

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

CodeOcelot
quelle