Funciones opendir, readdir y closedir en C

La función opendir se usa para abrir un directorio. Su prototipo es:

DIR *opendir(const char *nombre);

El único parámetro que recibe es el nombre del directorio que se quiere abrir. Devuelve un puntero al flujo de directorio (DIR) o NULL en caso de error. Este puntero se colocará en la primera entrada del directorio.

La función readdir sirve para leer las entradas del directorio abierto con opendir. Su prototipo es:

struct dirent *readdir(DIR *dir);

Recibe como parámetro el puntero al flujo de directorio (DIR) que se obtuvo con opendir y devuelve un puntero a una estructura dirent o NULL en caso de error o fin del directorio. Esta estructura dirent representa la siguiente entrada de directorio al que apunte dir.

La función closedir cierra el flujo de directorio que se obtuvo con opendir. Su prototipo es:

int closedir(DIR *dir);

Recibe como parámetro el puntero al flujo de directorio (DIR) y devuelve 0 en caso de éxito y -1 en caso de error.

Y nada mejor que un ejemplo para entenderlo:

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

int main (int argc, char *argv[]){

 /* Variables */
 DIR *dirp;
 struct dirent *direntp;

 /* Comprobamos los argumentos */
 if (argc != 2){
 printf("Uso: %s directorio\n", argv[0]);
 exit(1);
 }

 /* Abrimos el directorio */
 dirp = opendir(argv[1]);
 if (dirp == NULL){
 printf("Error: No se puede abrir el directorio\n");
 exit(2);
 }

 /* Leemos las entradas del directorio */
 printf("i-nodo\toffset\t\tlong\tnombre\n");
 while ((direntp = readdir(dirp)) != NULL) {
 printf("%d\t%d\t%d\t%s\n", direntp->d_ino, direntp->d_off, direntp->d_reclen, direntp->d_name);
 }

 /* Cerramos el directorio */
 closedir(dirp);
}
Anuncios

7 pensamientos en “Funciones opendir, readdir y closedir en C

  1. trabaja con wordpress??? el opendir… ya que me da error al crear la ruta del directorio
    $ruta = “./fotos_galeria/uploads/”;
    or
    $ruta = bloginfo(‘template_directory’) “/fotos_galeria/uploads/”;

    agradeceri de su apoyo
    omar galaviz

  2. @jhondery y @Salvador, a mí el código me funciona correctamente. Lo he compilado y ejecutado correctamente.

    $ gcc -o listado listado.c
    $ ./listado
    Uso: ./listado directorio
    $ ./listado /root/
    i-nodo offset long nombre
    1262420 25981182 20 vmware
    1261578 69873112 20 backup
    1262433 641040592 16 test
    1261570 2005412421 20 .profile
    1262423 2064517490 20 .forward
    1261575 2147483647 28 .bash_history

    @omar esto es C. WordPress usa PHP y sus funciones son otras.

    • es cierto,a Mi no me funciona nada, no fue mi intencion criticar el post,por el contrario, agradezco la buena voluntad de explicar desinterizadamente.

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