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