Programa printdir.c

Vamos a elaborar un programa de escaneo de directorios:

  1. Comenzamos con las cabeceras adecuadas y siga con una función, printdir, que muestra el directorio actual. Volverá a dirigir los subdirectorios usando el parámetro de sangrado depth.printdir_parte1
  2. Ahora seguiremos con la función principal (main) a partir de la última línea del programa anterior.
    printdir_main

El programa escanea los directorios raíz y genera salidas como la que aparece a continuación. Para ver los directorios de otros usuarios necesitará permisos de superusuario:

printdir_salidaVeamos su funcionamiento:

La mayor parte de la acción se produce en la función printdir. Tras algunas comprobaciones de error iniciales usando opendir para ver que el directorio existe, printdir llama a chdir al directorio especificado. Mientras las entradas enviadas por readdir no sean nulas, el programa comprueba si la entrada es un directorio. Si no lo es, muestra la entrada de archivo con el sangrado depth.

Si la entrada es un directorio, se producirá cierta repetición. Una vez que se hayan ignorado las entradas . y .. (el directorio actual y el padre), la función printdir se llama a sí misma y vuelve a realizar nuevamente el mismo proceso. ¿Como consigue salir de estos bucles? Una vez que ha acabado el bucle while, la llamada chdir ("..") lo devuelve a la parte superior del directorio en árbol y así puede continuar en la lista anterior. closedir (dp) asegura que el número de flujos de directorios abiertos no es mayor del necesario.

En posteriores capítulos hablaremos del entorno Linux, para ir abriendo boca, vamos a presentar un modo para generalizar el programa, que estará limitado porque es específico del directorio /home. Con los siguientes cambios en main, podría convertirlo en un navegador de directorio más útil:

printdir2Se modificaron tres líneas y se añadieron otras cinco, y ahora es una utilidad de propósito general con un parámetro opcional del nombre del directorio, que va por defecto con el directorio actual. Podemos usarlo usando el siguiente comando:

$> ./printdir2 /usr/local | more

Se paginará la salida para facilitar el trabajo al usuario. De esta manera, el usuario dispondrá de un práctico navegador de directorio en árbol con finalidad general.

printdir2_salidaatras

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s