ACCÉS A DIRECTORIS

Per accedir als directoris ens calen funcions similars a les que hem estudiat per accedir als ftxers ordinaris.

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

DIR * opendir(const char * nom_directori);
struct dirent * readdir(DIR * apdir);
int closedir(DIR * apdir);

opendir mira d'obrir el directori que se li passa com a paràmetre en mode lectura. Si es pot obrir, ens retorna un apuntador a una estructura que no estudiarem, l'estructura DIR, definida al fitxer de capçalera dirent.h. Si no es pot obrir el fitxer, retorna NULL i errno contindrà el codi de l'anomalia que s'hagi produït.

readdir llegeix una entrada del directori que prèviament hem obert i fa avançar el cursor de lectura dins el directori. Retorna una estructura anomenada dirent que tot seguit detallarem, però si falla retornarà NULL.

closedir com és de suposar, tancarà el directori que s'hagi obert prèviament. Retorna 0 si va bí i -1 si falla (errno contindrà el codi de l'error).

L'struct dirent el trobem definit a /usr/include/bits/dirent.h i pot constar de diversos camps entre els quals segurament es trobaran els següents:

d_ino de tipus equivalent a un long, conté el número que li correspon al fitxer: l'inode.
d_off distància des del començament del directori a la següent entrada de directori.
d_reclen mida en bytes de tota l'entrada de directori.
d_type tipus de fitxer. Aqui podeu trobar els que hi ha.
d_name[256] vector de caràcters acabat en '\0', és a dir, un string. Contidrà el nom del fitxer corresponent a l'entrada de directori que s'ha llegit.

El següent programa llegirà el directori que se li passi com a paràmetre i escriurà el nom i el tipus de fitxer de cada entrada.

Modifica'l per mostrar la resta de dades associades a cada entrada del directori.

Altres funcions que ens permeten "navegar" pels directoris són:

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

void rewinddir(DIR * apdir);
off_t telldir(DIR * apdir);
void seekdir(DIR * apdir, off_t posicio);

rewinddir posa el cursor de lectura/escriptura al començament del directori.

telldir pregunta en quina posició del directori ens trobem (consulta el camb d_off de l'struct dirent)

seekdir situa el cursor de lectura/escriptura al valor posicio que li passem. Aquest valor s'haurà d'haver obtingut amb telldir o consultant d_off.

 

 

Autor: Lluís València López

Creative Commons License
Aquesta obra està subjecta a una Llicència de Creative Commons.