|
DIR-Handles habe aber unterschiedliche Variablen. Die Variable hat unter UNIX
folgende Struktur (bei anderen Betriebssystemen kann auch die Struktur anders sein):
struct dirent
{
long d_ino; /* Inode Nummer */
off_t d_off; /* Offset zum naechsten dirent */
unsigned short d_reclen; /* Laenge dieses Eintrags */
char d_name[NAME_MAX+1]; /* Dateiname */
};
Für das Anwenderprogramm ist meist nur der Name des Eintrags interessant.
Will man mehr über diesen Eintrag erfahren, beispielsweise, ob es wieder ein
Verzeichnis ist, verwendet man andere Systemaufrufe, z. B. stat().
closedir()
Zuletzt wird das Verzeichnis mit closedir() wieder geschlossen.
Ein Beispielprogramm für das Auslesen eines Verzeichnisses sieht so aus:
#include <sys/types.h>
#include <dirent.h>
int main(void)
{
DIR *dirHandle;
struct dirent * dirEntry;
dirHandle = opendir("."); /* oeffne aktuelles Verzeichnis */
if (dirHandle != NULL)
{
while ((dirEntry = readdir(dirHandle)) != NULL)
{
puts(dirEntry->d_name);
}
closedir(dirHandle);
}
return(0);
}
rewinddir()
Diese Funktion setzt den Lesezeiger wieder auf den Anfang des Verzeichnisses.
Die Syntax des Befehls lautet:
void rewinddir(DIR *dir);
getcwd()
Die Funktion getcwd() ermittelt das aktuelle Arbeitsverzeichnis.
Dazu hat das aufrufende Programm einen Puffer für den Namen zur Verfügung
zu stellen, der groß genug ist. Die Größe wird als weiterer Parameter
übergeben. Reicht dieser Speicher nicht aus, gibt getcwd() NULL
zurück.
#include <unistd.h>
char * getcwd(char *namebuffer, size_t size);
In einigen Systemen ist es zulässig, NULL als Parameter für namebuffer
zu übergeben. Dann alloziiert getcwd() selbst den benötigten
Speicher und gibt den Zeiger darauf zurück. Die Anwendung muß dann durch
einen Aufruf von free() den Speicher wieder freigeben.
chdir()
Mit der Funktion chdir() wird das aktuelle Arbeitsverzeichnis
gewechselt.
#include <unistd.h>
int chdir(char *Pfad);
Bei Erfolg gibt die Funktion 0, sonst -1 zurück. Die Fehlernummer findet
sich in der Variablen errno.
Anlegen und Löschen von Verzeichnissen: mkdir(), rmdir()
Die Funktionen zum Anlegen und Löschen der Verzeichnisse heißen wie die
entsprechenden UNIX-Befehle. Beim Anlegen werden Zugriffsrechte übergeben.
Wie das UNIX-Kommando rmdir kann auch die Funktion nur leere Verzeichnisse
löschen.
#include <fcntl.h>
#include <unistd.h>
int mkdir(char *Pfadname, mode_t mode);
int rmdir(char *Pfadname);
Bei Erfolg geben die Funktionen 0, ansonsten -1 zurück. Die Fehlernummer findet
sich in der Variablen errno.
|
|
|