ein Kapitel zurück                                           ein Kapitel weiter

Der Syntax lautet....

#include <unistd.h>  //für UNIX/LINUX
#include <io.h>      //für MS-DOS

int access(const char *pfad, int modus);

Die Funktion access() überprüft ob der pfad der Datei existiert und die Zugriffsrechte modus besitzt. Folgende Zugriffsrechte (Modus) existieren....

modus Bedeutung
00 oder F_OK Datei existiert
01 oder X_OK Datei ausführbar (nur UNIX/LINUX)
02 oder W_OK Datei beschreibbar
04 oder R_OK Datei lesbar
06 oder W_OK|R_OK Datei lesbar und beschreibbar


Bei Erfolg gibt die Funktion den Wert 0 zurück bei Fehler -1. Wir wollen ein Programm schreiben das alle Modi mit der Funktion access benutzt. Wieder testen wir alle Programme die sie in der Kommandozeile eingeben....

/*Download:access1.c*/
#ifdef __unix__ #include <unistd.h> #else #include <io.h> #endif #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if(argc == 1) { fprintf(stderr,"Geben sie mindestens eine Datei an!!!\n"); exit (1); } while(*++argv) { printf("%s : \n",*argv); if(access(*argv, 00) != -1) /*Existiert die Datei?*/ { if(access(*argv, 06) == -1) /*Lesen und Schreiben nicht erlaubt*/ { if(access(*argv, 04) != -1) /*Nur lesen?*/ printf("...ist lesbar\n"); else if(access(*argv, 02) != -1) /*Nur schreiben?*/ printf("...ist schreibbar\n"); } else printf("...ist lesen und schreiben erlaubt\n"); if(access(*argv, 01) != -1) /*Datei ausführbar?*/ printf("...ist ausführbar\n"); } else fprintf(stderr,"...existiert nicht\n"); }/*Ende while*/ return 0; }

Zuerst überprüfen wir ob die Datei überhaupt existiert mit....

if(access(*argv, 00) != -1)

Falls sie existiert überprüfen ob sie zum Lesen und Schreiben freigegeben ist....

if(access(*argv, 06) != -1)

Wenn nicht überprüfen ob sie zum Lesen ODER Schreiben freigegeben ist....

if(access(*argv, 04) != -1)
    printf("...ist lesbar\n");
else if(access(*argv, 02) != -1)
    printf("...ist schreibbar\n");

Die Überprüfung ob die Datei ausführbar....

if(access(*argv, 01) != -1)

können sie bei DOS entfernen. Da dies nur unter Unix/Linux einen Sinn ergibt.

Unter Linux überprüft access übrigens nur die ersten 3 User Bits UID. Also des Eigentümers der Datei. Sie können dabei ohne weiteres mehrer Konstanten verknüpfen......

/*Download:access2.c*/
#ifdef __unix__ #include <unistd.h> #else #include <io.h> #endif #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if(argc == 1) { fprintf(stderr,"Geben sie mindestens eine Datei an!!!\n"); exit (1); } while(*++argv) { if( (access(*argv,F_OK|R_OK) ) != -1) printf("%s : Datei existiert und sie haben Leserechte dazu\n",*argv); } return 0; }

Hier überprüfen wir ob die Datei existiert und wir Leserechte dafür haben.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf