¿Cuál es el término técnico para el directorio actual (.) Y padre (..)?


20

Obtuve una función que verifica si el nombre del archivo pasado es .o ... Pero no sé cómo nombrarlo correctamente. Algo así IsCurrentOrParentDirectory()es ambiguo, ya que la función toma un nombre de archivo y no una ruta completa. (Intuitivamente, un compañero programador esperaría que pasara /usr/mientras estoy dentro /usr/regresaría true, mientras que este no es el caso).

¿Existe un término técnico para estas entradas de directorio? Si hay uno, ¿cuál es?


1
. y ... NO son nombres de archivo, sino carpetas. ¿Por qué no verifica si la entrada es un archivo válido (el tipo según stat () es IF_REG)? PD: Esto probablemente sea más adecuado para StackOverflow
Tonny

77
@Tonny .y .. son nombres de archivos de acuerdo con el estándar POSIX. Vea mi cita a continuación. Yo diría que está bien aquí, ya que se trata de conceptos informáticos generales.
slhck

Tengo que admitir que mi redacción fue ambigua nuevamente. La función toma un solo archivo o directorio ( foo.bar, foo, ...) pero no una ruta de acceso ( foo/bar, /foo/, ...). Pero como los directorios, enlaces, etc. también son archivos, lo dejaré así.
Max Truxa

@slhck POSIX lo llama un archivo, pero lo hace para CUALQUIER objeto del sistema de archivos. El archivo en la terminología POSIX generalmente debe leerse como una abreviatura de "objeto del sistema de archivos". A principios de Unix y sus derivados, todos los FSO donde realmente realmente se archivan, pero eso no es cierto para algunas implementaciones modernas y ciertamente no para sistemas operativos que no son Unix, sino compatibles con POSIX (Windows NT como el ejemplo más obvio). - Probablemente debería haber escrito "es un archivo normal" en lugar de "archivo válido" en mi comentario, pero el comentario de Max Truxa lo convierte en un punto discutible de todos modos.
Tonny

Respuestas:


23

Del estándar POSIX :

El punto de nombre de archivo especial se referirá al directorio especificado por su predecesor. El nombre de archivo especial dot-dot se referirá al directorio padre de su directorio predecesor. Como caso especial, en el directorio raíz, punto-punto puede referirse al directorio raíz en sí.

Entonces, realmente, si desea verificar si el nombre de archivo es .o ..tendría que llamarlo IsDotOrDotDot(), o, utilizando la terminología POSIX de resolución de nombre de ruta IsPredecessorOrParentOfPredecessor(), o tal vez incluso PointsToPredecessorOrParentOfPrecedessor()... se le ocurre la idea. El problema es que la última terminología solo tiene sentido cuando se miran nombres de ruta completos. Pero nadie lo entendería de todos modos.

Teniendo en cuenta eso .y ..son nombres de archivo válidos (solo interpretados de manera diferente), solo debe atenerse a lo que tiene, confiando en el significado en lugar de en cómo se llaman internamente.


¿Es .bash_historypunto o no punto? No estoy seguro de si el nombre de esa función es más descriptivo que el OP propuesto.
Jens Erat

@JensErat Eso es irrelevante para el problema. La pregunta era si el componente de nombre de archivo era .o no .., y no si acababa de comenzar con a .. Por supuesto, el nombre de la función del OP es más descriptivo; Solo le estaba señalando cómo se conoce técnicamente.
slhck

2
Claro que lo es, pero no IsDotOrDotDot()dice nada sobre lo que está haciendo la función.
Jens Erat

"predecesor" se refiere al elemento de ruta inmediatamente antes de él en la especificación de ruta. Si solo está mirando los nombres de las entradas en un directorio, "actual" o "padre" es una mejor terminología.
Simon Richter

2
@JensErat que usaría IsDotOrDotDot. Cualquiera que conozca los conceptos del sistema de archivos lo comprenderá al instante. Es discutible si .bash_historyes "punto" porque no se proporciona contexto para el significado de "punto", pero definitivamente NO es "punto o punto punto".
kinokijuf

4

.y ..generalmente se usan para describir rutas relativas frente a las absolutas como /usr. Usaría esta diferencia y declararía la función como IsRelativeCurrentOrParentDirectory().

Tenga en cuenta que las referencias de puntos pueden aparecer en cualquier parte de la ruta. ¿Qué hay de /usr/local/..?


No pude señalar que la función solo toma un nombre de archivo y no una ruta completa. Actualicé la pregunta en consecuencia.
Max Truxa

2

El estándar POSIX, que slhck ♦ citado útilmente, dice:

El punto de nombre de archivo especial se referirá a ...  El nombre de archivo especial dot-dot se referirá a ...

(énfasis añadido). Entonces, aunque no es exactamente técnico , parece que "nombre de archivo especial" podría ser el nombre oficial . Sus usuarios probablemente entenderlo si se llama a su función de cualquiera de los siguientes: IsSpecialDirectory(), IsSpecialFilename()o simplemente IsSpecialName().

O usted podría ir con IsStandardDirectory(), IsStandardFilename()o IsStandardName(). Esto sigue la convención de nomenclatura de Unix (entrada estándar, salida estándar) para las cosas que se establecen automáticamente para usted (en este caso, por mkfsy mkdir).  IsAutomatic…()o IsDefault…(), por otro lado, probablemente no son lo suficientemente intuitivos.


En realidad, el primer nombre que tomé fue IsMagicDirectory()muy cercano a eso, pero creo que su redacción es mucho más intuitiva y apropiada (especialmente porque usa convenciones de nomenclatura establecidas). El uso IsSpecialFileNameincluso dejaría en claro que la función no recibe una ruta sino un solo nombre de archivo (o directorio, enlace, etc.).
Max Truxa

Buena sugerencia. "Especial", sin embargo, probablemente también incluiría enlaces, FIFO, etc., ¿verdad?
slhck

@slhck: Sí, los dispositivos (p. ej., discos y ttys) se denominan "archivos especiales". Y, sí, el término podría aplicarse libremente a enlaces simbólicos, FIFO y otros habitantes exóticos del sistema de archivos, cualquier tipo de archivo (i-node) que no sea un "archivo normal". (Sí, los directorios también caen en este cubo). Entonces IsSpecialFile()habría sido una mala sugerencia. Pero no sugerí eso; Sugerí IsSpecialFilename(). Mientras que los nombres sda1, console, kmem, myfifoy urandomson sugestivos, que no están reservados y no son intrínsecamente especial. Pero .y ..son nombres de archivo inherentemente especiales .
Scott

1

El único término que conozco del mundo * nix es CWDpara el Directorio de trabajo actual. Eso en realidad se usa con bastante frecuencia. Vea, por ejemplo, /proc/$$/cwdcuál es un enlace al directorio desde el que ejecuta el comando.

No conozco ningún nombre estándar ..aparte dot-doty como señaló @slhck, esa no es una buena opción.


0

Posix es bastante ambiguo al hablar sobre las relaciones de directorio padre-hijo. Como otros han dicho, ./ ..no es útil al hablar o comunicarse con otros humanos.

Las estructuras de archivos pueden considerarse como una estructura de datos de árbol. Aquí, generalmente "padre" e "hijo" o "hija" son suficientes para transmitir el significado. Verá que los libros de texto de estructura de datos llevan esta convención

Alternativamente, parece que se puede hablar de árboles como "arriba" y "abajo" del árbol. Por convención, "arriba" significa más cerca del directorio raíz, y "abajo" se refiere a los hijos.

Creo que IsCurrentOrUp()o IsCurrentOrParent()se puede argumentar que es una buena práctica para nombrar funciones.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.