B.5 Verzeichnisse
Für die Funktionen in der Tabelle B.30 sind folgende Headerdateien nötig:
#include <unistd. h.>
/* ... und nur für mkdir() ... */
#include <sys/types.h>
#include <sys/stat.h>
Tabelle B.30
Funktionen zum Arbeiten mit Verzeichnissen
Syntax
|
Bedeutung
|
int mkdir( const char * pfad,
mode_t modus );
|
Anlegen eines neuen Verzeichnisses
|
int chdir(const char *pfad);
int fchdir(int fd);
|
In ein Verzeichnis wechseln
|
int rmdir( const char *pfad ) ;
|
Löschen eines (leeren) Verzeichnisses
|
char *getcwd( char *puffer,
size_t groesse );
|
Pfadname des Arbeitsverzeichnisses ermitteln
|
Um aus einem Verzeichnis zu lesen, schreibt POSIX die Struktur dirent vor, welche in der Headerdatei <dirent.h> definiert ist. Unter Linux finden Sie in dieser Struktur die folgenden Komponenten:
struct dirent {
long d_ino; /* Inode (nicht in POSIX.1) */
off_t d_off; /* Offset zu diesem Eintrag */
unsigned short d_reclen; /* Länge des Namen */
char d_name[NAME_MAX+1]; /* Name */
};
Neben der Headerdatei <dirent.h> benötigen einige der folgenden Funktionen auch die Headerdatei <sys/types.h>.
Tabelle B.31
Lesen von Verzeichnissen
Syntax
|
Bedeutung
|
DIR* opendir (const char* name);
|
Verzeichnis zum Lesen öffnen
|
struct dirent* readdir(
DIR* dir);
|
Verzeichnis Eintrag um Eintrag schrittweise lesen
|
void rewinddir(DIR *dir);
|
DIR-Zeiger wieder auf den Anfang der Namensliste setzen
|
int closedir (DIR* dir)
|
Verzeichnis (DIR-Zeiger) wieder schließen
|
long telldir(const DIR *dir);
|
Position des Verzeichnis-Zeigers abfragen
|
void seekdir( DIR *dirp,
long loc );
|
Zu einem mit loc angegebenen Verzeichnis-Eintrag springen
|
int scandir (
const char* dir,
struct dirent ***namelist,
int (*select)
(const struct dirent*),
int (*compar)
(const struct dirent**,
const struct dirent**))
|
Ein gesamtes Verzeichnis scannen (nur BSD – also auch Linux)
|
Des Weiteren bieten SysV-Systeme in der Headerdatei <ftw.h> weitere Funktionen an, womit ein Verzeichnisbaum rekursiv durchlaufen werden kann.
Tabelle B.32
Verzeichnisbaum rekursiv durchlaufen
Syntax
|
Bedeutung
|
int ftw(
const char *path,
int (*fn)
(const char *,
const struct stat *,
int),
int depth );
|
Durchläuft einen kompletten Verzeichnisbaum und ruft für jede Datei im Verzeichnisbaum eine Benutzerdefinierte Funktion auf.
|
int nftw(
const char *path,
int (*fn)
( const char *,
const struct stat *,
int,
struct FTW*),
int depth,
int flags);
|
Wie ftw(), nur folgt nftw() stattdessen nicht den symbolischen Links
|
|