ein Kapitel zurück                                           ein Kapitel weiter

Der Syntax lautet...

#include <sys/types.h>  //Linux/Unix
#include <sys/stat.h>   //Linux/Unix
#include <dir.h>        //MS-DOS/WIN

int mkdir(const char *pfad, [int modus]);

Mit mkdir legen sie ein neues Verzeichnis in und mit dem Namen und in pfad an. Zusätzlich werden in diesem Verzeichnis automatisch das Working Directory (.) und das Parent Directory (..) angelegt. Die Zugriffsrechte können unter modus vergeben werden. Dies gilt aber nur unter Linux/Unix und nicht für MS-DOS. Die Modi unter Linux/Unix entnehmen sie bitte von dem Kapitel chmod. Wir wollen jetzt ein neues Verzeichnis erstellen in dem Verzeichnis dem wir unser Programm ausführen. Wir erstellen ein Verzeichnis ohne modus. Wollen sie das Verzeichnis anderswo erstellen, achten sie bitte auf die richtige Schreibweise (Linux = '/' MS-Dos = '\').

/*Download:mdir.c*/
#ifdef __unix__ #include <sys/types.h> #include <sys/stat.h> #else #include <dir.h> #endif #include <stdio.h> #include <stdlib.h> int main() { char pfadname[200]; printf("Wie soll der neue Ordner heißen : "); scanf("%s",pfadname); if(mkdir(pfadname, 0711) == -1) /*Bei M$ 0711 entfernen*/ fprintf(stderr,"Konnte kein neues Verzeichnis erstellen\n"); else fprintf(stderr,"Neues Verzeichnis Namens %s erstellt\n",pfadname); return 0; }

Wenn sie das Programm ausgeführt haben sollte in dem Verzeichnis in dem sie das Programm ausführen ein neuer Ordner mit dem Namen den sie eingegeben haben sein. Sie sollten übrigens beachten das sie für den modus auch die Ausführrechte (execute-Bits) setzen, damit auch Zugriff auf das neue Verzeichnis haben.

Nun als nächstest dürften sie wohl gleich in dieses Verzeichnis wechseln wollen, da sie es schon erstellt haben. Dies machen sie mit.......

chdir

Der Syntax von chdir.... #include <unistd.h> //Linux/Unix #include <dir.h> //MS-Dos/WIN int chdir(const char *pfad);

Mit chdir können sie in das Working-Directory, welches jedes Ablaufendes Programm besitzt, wechseln. Bei Fehler gibt die Funktion -1 zurück ansonsten 0. Wir wollen jetzt Probehalber ein neues Verzeichnis erstellen (mkdir), in diese Verzeichnis wechseln (chdir) und darin eine Textdatei erstellen.

/*Download:cdir1.c*/
#ifdef __unix__ #include <sys/types.h> #include <sys/stat.h> #else #include <dir.h> #endif #include <stdio.h> #include <stdlib.h> int main() { char pfadname[200]; printf("Wie soll der neue Ordner heißen : "); scanf("%s",pfadname); if(mkdir(pfadname, 0711) == -1){ /*Bei M$ 0711 entfernen*/ fprintf(stderr,"Konnte kein neues Verzeichnis erstellen\n"); exit(0); } else fprintf(stderr,"Neues Verzeichnis Namens %s erstellt\n",pfadname); /*Jetzt wollen wir in das neue Verzeichnis wechseln*/ if(chdir(pfadname) == -1){ fprintf(stderr,"Konnte nicht in das neue Verzeichnis wechseln\n"); exit(0); } else printf("Erfolgreich nach %s gewechselt!\n",pfadname); /*testfile im Verzeichnis toll erstellen*/ fopen("testfile","w"); return 0; }

Nun befindet sich im Verzeichnis das sie eben erzeugt haben eine Datei Namens 'testfile'. Als Beweis das auch wirklich in unser neues Verzeichnis gewechselt wurde. Ihnen dürfte auch aufgefallen sein das wenn das Programm sich beendete automatisch wieder zu dem Elternprozess zurückwechselt.

Wenn man mehrmals in einem Programm Verzeichnisse erstellt und in diese wechselt, schreibt man dafür besser ein Funktion.....

/*Download:cdir2.c*/
#ifdef __unix__ #include <sys/types.h> #include <sys/stat.h> #else #include <dir.h> #endif #include <stdio.h> #include <stdlib.h> int makedir(char *dir) { if(mkdir(dir,0755) != -1) if(chdir(dir) != -1) return 0; return -1; } int main() { char pfadname[200]; printf("Wie soll der neue Ordner heißen : "); scanf("%s",pfadname); if(makedir(pfadname) == -1){ fprintf(stderr,"Konnte kein neues Verzeichnis erstellen\n"); exit(0); } /*testfile im Verzeichnis toll erstellen*/ fopen("testfile","w"); return 0; }

Nun wollen wir unser erstelltes Verzeichnis wieder entfernen. Verzeichnisse löschen können wir mittels...

rmdir

Der Syntax von rmdir lautet...

#include <unistd.h>   //Unix/Linux
#include <dir.h>      //MS-Dos

int rmdir(const char *pfad);

Mit rmdir können sie ein Directory (rmdir = remove Directory) löschen. Vorrausgesetzt das Verzeichnis beinhaltet außer dem (.) und (..) keinen anderen Eintrag. Bei Erfolg gibt die Funktion 0 zurück und bei einem Fehler -1. Nehmen wir als bestes Beispiel gleich wieder unser Programm vom Kapitel zuvor (mkdir) und löschen unser Verzeichnis gleich wieder nachdem wir es erstellt haben.

Nun wollen wir das Verzeichnis welches wir in diesem Kapitel erstellt haben wieder löschen.........

/*Download:rdir.c*/
#ifdef __unix__ #include <sys/types.h> #include <sys/stat.h> #else #include <dir.h> #endif #include <stdio.h> #include <stdlib.h> int makedir(char *dir) { if(mkdir(dir,0755) != -1) if(chdir(dir) != -1) return 0; return -1; } int main() { char pfadname[200]; printf("Wie soll der neue Ordner heißen : "); scanf("%s",pfadname); if(makedir(pfadname) == -1){ fprintf(stderr,"Konnte kein neues Verzeichnis erstellen\n"); exit(0); } /*testfile im Verzeichnis toll erstellen*/ fopen("testfile","w"); if(rmdir(pfadname) == -1) fprintf(stderr, "Konnte Verzeichnis %s nicht löschen!!\n"); return 0; }

Bei M$ wird das ganze wieder toll funktionieren, typisch. Bei Linux/Unix können sie das Verzeichnis nicht löschen da sich dort noch eine Datei befindet. Es muss also erst das Verzeichnis komplett leer sein. Dies können sie entweder mit den Funktionen machen die sie in den nächsten Kapiteln kennelernen werden (opendir,readdir, closedir) oder mit dem Shellaufruf...

rmdir Verzeichnis | rm -rf Verzeichnis/*

In unserem Programm können sie dies folgendermaßen einsetzen.....

/*Download:rdir2.c*/
#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <stdlib.h> int main() { char pfadname[200]; char deletefiles[200]; FILE *tmp; printf("Welchen Ornder wollen sie löschen : "); scanf("%s",pfadname); strcpy(deletefiles,"rm -rf "); strcat(deletefiles,pfadname); strcat(deletefiles,"/*"); printf("%s\n",deletefiles); system(deletefiles); if(rmdir(pfadname) == -1) fprintf(stderr, "Konnte Verzeichnis %s nicht löschen!!\n",pfadname); return 0; }

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf