Pregunta

Yo entiendo que un directorio es simplemente un archivo en UNIX que contiene los números de inodo y los nombres de los archivos dentro. ¿Cómo tomo un vistazo a esto? No puedo usar gato o menos en un directorio, y abriéndola en vi solo me muestra una lista de los archivos ... no hay números de inodo.

¿Fue útil?

Solución

Como se trata de una cuestión de programación (que es una cuestión de programación, ¿verdad?), Que debe salir de las funciones opendir, readdir y closedir. Estos son parte de la Single UNIX Espec.

#include <sys/types.h>
#include <dirent.h>

DIR *opendir (const char *dirname);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);

El archivo dirent.h debe tener la estructura que necesita, que contiene al menos:

char   d_name[]    name of entry
ino_t  d_ino       file serial number

aquí para la página de manual readdir - contiene enlaces a los otros.

Tenga en cuenta que la cantidad de información acerca de un archivo almacenado en las entradas de directorio para ello es mínimo. El i-nodo en sí contiene el material que se obtiene de la función stat, cosas como tiempos, tamaño, propietario, permisos, etc., junto con los punteros de suma importancia en el contenido real del archivo.

Otros consejos

En los viejos tiempos - Versión 7, Sistema III, a principios Sistema V - que de hecho podría abrir un directorio y leer el contenido en la memoria, especialmente para el sistema de archivos Unix de edad con números de inodo de 2 bytes y un límite de 14 bytes en el nombre del archivo.

A medida que los sistemas de archivos más exóticos se hicieron más frecuentes, el opendir (), readdir (), closedir () de la familia de llamadas a funciones tuvo que ser utilizado en su lugar porque al analizar el contenido de un directorio hizo cada vez más no trivial.

Finalmente, en la última década más o menos, se ha llegado al punto en el que en la mayoría de los sistemas, no se puede leer el directorio; se puede abrir (principalmente por lo que las operaciones tales como fchdir () pueden trabajar), y se puede utilizar la familia opendir () de llamadas para leerlo.

Parece que el comando stat podría estar en orden. Desde el artículo:

stat /etc/passwd

    File: `/etc/passwd'
    Size: 2911                Blocks: 8 IO    Block: 4096 regular file
    Device: fd00h/64768d      Inode: 324438   Links: 1
    Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2008-08-11 05:24:17.000000000 -0400
    Modify: 2008-08-03 05:11:05.000000000 -0400
    Change: 2008-08-03 05:11:05.000000000 -0400
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top