Capítulo 23. Trabajo con directorios 23.1. Objetivos

Anuncio
Capítulo 23. Trabajo con directorios
23.1. Objetivos
Manipular directorios, obtener información sobre ficheros y examen de un pequeño programa
recursivo. Utilización de un depurador para seguir un programa.
23.2. Documentación de las transparencias
Las transparencias relevantes para realizar esta práctica son:
- Páginas 43-46 de las transparencias de C
- Páginas 51-52 de las transparencias de Bibliotecas de C y llamadas al sistema
23.3. Requisitos
Estudio de las operaciones de directorio: llamada al sistema (getdents) y rutinas de conveniencia
(opendir, closedir, readdir, etc), de las de obtener información sobre un fichero (stat, lstat
y fstat), y del depurador.
23.4. Especificación
Estudie el siguiente programa, arbol.c , que lista recursivamente los directorios que se le pasan
como parámetros.
#include
#include
#include
#include
#include
#include
<stdio.h>
<sys/types.h>
<sys/stat.h>
<limits.h>
<dirent.h>
<stdlib.h>
int nivel = 0;
void tree (char* path) {
DIR* dirp;
struct dirent* dp;
if ((dirp = opendir (path)) == NULL) {
perror (path);
return;
}
while ((dp = readdir (dirp)) != NULL) {
struct stat buf;
char fichero [PATH_MAX];
int i;
if ((strcmp (dp->d_name, ".") == 0)
|| (strcmp (dp->d_name, "..") == 0))
continue;
sprintf (fichero, "%s/%s", path, dp->d_name);
for (i = 0; i < nivel; i ++)
printf ("
");
1
Capítulo 23. Trabajo con directorios
printf ("%s\n", dp->d_name);
if (lstat (fichero, & buf) == -1) {
perror(fichero);
exit(1);
}
if ((buf.st_mode & S_IFMT) == S_IFDIR) {
nivel++;
tree (fichero);
nivel--;
}
}
closedir (dirp);
}
int main (int argc, char* argv []) {
int i;
if (argc == 1) tree (".");
else
for (i = 1; i < argc; i++)tree (argv[i]);
}
•
Sitúese en su directorio de trabajo con cd y ejecútelo sin parámetros y con diversos parámetros,
para comprender su funcionamiento. Puede probar con ., .., /bin, /boot, ambos (/boot
/bin), etc.
•
Sígalo con un depurador (gdb o ddd), pasándole como argumento un directorio con subdirectorios
(por ejemplo /etc). Sigalo paso a paso y poniendo puntos de parada. Vea el contenido de
variables relevantes, incluidas las asignadas automáticamente en la pila en las llamadas recursivas.
•
Modifíquelo para que además de nombre del fichero o directorio muestre el número de inodo.
Utilice el depurador para ayudarse.
23.5. Ficheros ofrecidos
En el directorio dir:
•
Programa arbol.c.
•
Una solución compilada: arbol2.
23.6. Resultados pedidos
•
El módulo fuente: arbol2.c.
2
Descargar