|
![ein Kapitel weiter](../weiter.gif)
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 weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|