Qual è il termine tecnico per directory corrente (.) E parent (..)?


20

Ho una funzione che controlla se il nome del file passato è .o ... Ma non so come nominarlo correttamente. Qualcosa di simile IsCurrentOrParentDirectory()è ambiguo, poiché la funzione prende un nome file e non un percorso completo. (Intuitivamente un collega programmatore si aspetterebbe di passare /usr/mentre sono dentro /usr/ritornerebbe true, mentre in realtà non è così.)

Esiste un termine tecnico per queste voci della directory? Se ce n'è uno, cos'è?


1
. e .. NON sono affatto nomi di file, ma cartelle. Perché non controlli semplicemente se l'input è un file valido (il tipo secondo stat () è IF_REG)? PS Questo è probabilmente più adatto a StackOverflow
Tonny il

7
@Tonny .e .. sono nomi di file secondo lo standard POSIX. Vedi la mia citazione qui sotto. Direi che va bene qui perché si tratta di concetti informatici generali.
slhck,

Devo ammettere che la mia formulazione è stata di nuovo ambigua. La funzione prende un singolo file o il nome della directory ( foo.bar, foo, ...), ma non un percorso ( foo/bar, /foo/, ...). Ma poiché anche directory, collegamenti, ecc. Sono file, lo lascerò così.
Max Truxa,

@slhck POSIX lo chiama un file, ma lo fa per QUALSIASI oggetto del file system. Il file nella terminologia POSIX deve essere generalmente letto come abbreviazione di "oggetto file system". All'inizio di Unix ed è derivato da tutti i file FSO in cui si trovano effettivamente file, ma ciò non è vero per alcune implementazioni moderne e certamente non per sistemi non Unix, ma con sistemi operativi compatibili con POSIX (Windows NT come esempio più ovvio). - Probabilmente avrei dovuto scrivere "è un file normale" anziché "file valido" nel mio commento, ma il commento di Max Truxa lo rende comunque controverso.
Tonny,

Risposte:


23

Dallo standard POSIX :

Il punto nome file speciale deve fare riferimento alla directory specificata dal suo predecessore. Il nome file speciale punto-punto deve fare riferimento alla directory principale della directory precedente. Come caso speciale, nella directory principale, punto-punto può fare riferimento alla directory principale stessa.

Quindi, davvero, se vuoi controllare se il nome del file è .o ..dovresti chiamarlo IsDotOrDotDot(), o, usando la terminologia POSIX per la risoluzione del nome percorso IsPredecessorOrParentOfPredecessor(), o forse anche PointsToPredecessorOrParentOfPrecedessor()... hai l'idea. Il problema è che quest'ultima terminologia ha senso solo quando si guardano i nomi completi dei percorsi. Ma nessuno lo capirà comunque.

Considerando che .e ..sono nomi di file validi (solo interpretati in modo diverso), si dovrebbe solo attenersi a quello che hai, basandosi sul significato piuttosto che il modo in cui sono chiamati internamente.


Il .bash_historypunto è o non punto? Non sono sicuro se quel nome di funzione sia più descrittivo dell'op proposto dall'OP.
Jens Erat,

@JensErat Questo è irrilevante per il problema. La domanda era se il componente nome file fosse .o .., e non se fosse appena iniziato con a .. Naturalmente il nome della funzione dell'OP è più descrittivo; Lo stavo solo indicando come viene tecnicamente indicato.
slhck,

2
Certo che lo è, ma non IsDotOrDotDot()dice praticamente nulla di ciò che la funzione sta facendo.
Jens Erat,

"predecessore" si riferisce all'elemento path immediatamente prima di esso nella specifica del percorso. Se stai solo osservando i nomi delle voci in una directory, "corrente" o "padre" è una terminologia migliore.
Simon Richter,

2
@JensErat che userei IsDotOrDotDot. Chiunque fosse a conoscenza dei concetti del filesystem lo capirà immediatamente. È discutibile se .bash_historysi tratti di "punto" perché non viene fornito alcun contesto per il significato di "punto", ma NON è sicuramente "punto o punto punto".
Kinokijuf,

4

.e di ..solito sono usati per descrivere percorsi relativi rispetto a percorsi assoluti come /usr. Userei questa differenza e dichiarerei la funzione come IsRelativeCurrentOrParentDirectory().

Tenere presente che i riferimenti a punti possono verificarsi in qualsiasi punto del percorso. Che dire /usr/local/..?


Non sono riuscito a sottolineare che la funzione accetta solo un nome file e non un percorso completo. Ho aggiornato la domanda di conseguenza.
Max Truxa,

2

Lo standard POSIX, che ♦ cita utilmente, dice:

Il punto nome file speciale deve fare riferimento a ...  Il nome del file speciale punto-punto deve riferirsi a ...

(enfasi aggiunta). Quindi, sebbene non sia esattamente tecnico , sembra che "nome file speciale" possa essere il nome ufficiale . Gli utenti avrebbero probabilmente capire se si chiama la funzione uno dei seguenti: IsSpecialDirectory(), IsSpecialFilename(), o semplicemente IsSpecialName().

Oppure si potrebbe andare con IsStandardDirectory(), IsStandardFilename()o IsStandardName(). Ciò segue la convenzione di denominazione Unix (input standard, output standard) per le cose che sono state stabilite automaticamente (in questo caso da mkfse mkdir).  IsAutomatic…()o IsDefault…(), d'altra parte, probabilmente non sono abbastanza intuitivi.


In realtà il primo nome che ho preso è stato IsMagicDirectory()quindi molto vicino a quello, ma penso che la tua formulazione sia molto più intuitiva e appropriata (soprattutto perché utilizza convenzioni di denominazione consolidate). L'uso IsSpecialFileNamechiarirebbe anche che la funzione non riceve un percorso ma un singolo nome di file (o directory, collegamento, ecc.).
Max Truxa,

Buon consiglio "Speciale" tuttavia probabilmente includerebbe anche collegamenti, FIFO, ecc., Giusto?
slhck,

@slhck: Sì, i dispositivi (ad es. dischi e tty) sono chiamati "file speciali". E, sì, il termine potrebbe essere liberamente applicato a collegamenti simbolici, FIFO e altri abitanti esotici del file system - qualsiasi tipo di file (i-node) diverso da un "file normale". (Sì, anche le directory cadono in questo secchio.) Quindi IsSpecialFile()sarebbe stato un cattivo suggerimento. Ma non l'ho suggerito; Ho suggerito IsSpecialFilename(). Mentre i nomi sda1, console, kmem, myfifoe urandomsono suggestivi, essi non sono riservati e non sono intrinsecamente speciale. Ma .e ..sono intrinsecamente speciali nomi di file .
Scott,

1

L'unico termine che conosco dal mondo * nix è CWDper Current Working Directory. Questo è in realtà abbastanza spesso usato. Vedere, ad esempio, /proc/$$/cwdche è un collegamento alla directory da cui si esegue il comando.

Non conosco nessun nome standard a ..parte dot-dote come ha sottolineato @slhck, non è una buona scelta.


0

Posix è piuttosto ambiguo nel parlare delle relazioni della directory padre-figlio. Come altri hanno già detto, ./ ..non è utile quando si parla o si comunica con altri umani.

Le strutture dei file possono essere pensate come una struttura di dati ad albero. Qui, in genere, "genitore" e "figlio" o "figlia" sono sufficienti per trasmettere significato. Vedrai che i libri di testo sulla struttura dei dati riportano questa convenzione

In alternativa, sembra che gli alberi possano essere descritti come "su" e "giù" sull'albero. Per convenzione, "su" significa più vicino alla directory principale e "giù" si riferisce al figlio / i.

Penso che sia IsCurrentOrUp()o si IsCurrentOrParent()possa sostenere che sia una buona pratica per le funzioni di denominazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.