access() Fehler
-
Hi, wieder der code:
#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <fcntl.h> void realid () { char pfad[300]; int i; printf("Welche Datei erfragen: "); scanf("%s", pfad); for (i = 0;i < 1;i++) { if (access (pfad,F_OK) < 0) fprintf(stderr,"Datei existiert nicht. Grund: %s\n",strerror(errno)); else { if (access(pfad,R_OK) < 0) printf("-"); else printf("r"); if (access (pfad, W_OK) < 0) printf("-"); else printf("w"); if (accesss (pfad, X_OK) < 0) printf("-"); else printf("x"); if (open(pfad,O_WRONLY) < 0) printf(" -(effektiv\n"); else printf(" w(effektiv)\n"); } } }
Ich krieg als fehlermeldung, dass access nicht definiert ist, wobei ich ja die headerdatei drin habe. Könnt ihr mir sagen, wieso der fehler kommt?
Vielen dank
-
http://man.linuxquestions.org/?query=access§ion=2&type=2
ganzen code bitte, den man auch kompilieren kann.
-
meinetwegen
nur nicht abkopieren und millionen damit verdienen
Und nicht meckern dass es scheisse aussiehtund wozu das programm.
#include <sys/types.h> #include <sys/stat.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <fcntl.h> /*-- stat --*/ void dateiattribut () { char pfad[300]; struct stat attrib; printf("Welche Datei von Dateiattributen und Zugriffsrechte erfragen: "); scanf ("%s", pfad); if (lstat(pfad,&attrib) == -1) fprintf(stderr,"Fehler bei lstat. Grund: %s\n",strerror(errno)); else if (S_ISREG (attrib.st_mode)) printf("Regulaere Datei z.B. Text\n"); else if (S_ISDIR (attrib.st_mode)) printf("Verzeichnis z.B. /home/user\n"); else if (S_ISCHR (attrib.st_mode)) printf("Zeichenorientierte Geraetedatei z.B. /dev/tty\n"); else if (S_ISBLK (attrib.st_mode)) printf("Blockorientierte Datei z.B. /dev/hdc\n"); else if (S_ISFIFO (attrib.st_mode)) printf("Pipe oder FIFO\n"); else if (attrib.st_mode & S_ISVTX) printf("Saved-Text-Bit ist fuer diese Datei gesetzt\n"); #ifdef S_ISLNK else if (S_ISLNK (attrib.st_mode)) printf("Symbolischer Link z.B. /dev/cdrom\n"); #endif #ifdef S_ISSOCK else if (S_ISSOCK (attrib.st_mode)) printf("Socket z.B. /var/run/lprng\n"); #endif else printf("Unbekannte Dateiart\n"); /** Zugriffsrechte **/ int i; for (i = 0; i < 1;i++) { if (lstat(pfad,&attrib) == -1) fprintf(stderr,"Fehler bei lstat. Grund: %s\n",strerror(errno)); else { if (S_ISDIR (attrib.st_mode)) printf("d"); if (S_ISCHR (attrib.st_mode)) printf("c"); if (S_ISBLK (attrib.st_mode)) printf("b"); else printf("-"); if (attrib.st_mode & S_IRUSR) printf("r"); else printf("-"); if (attrib.st_mode & S_IWUSR) printf("w"); else printf("-"); if (attrib.st_mode & S_IXUSR) printf("x"); if (attrib.st_mode & S_ISUID) printf("S"); else printf("-"); if (attrib.st_mode & S_IRGRP) printf("r"); else printf("-"); if (attrib.st_mode & S_IWGRP) printf("w"); else printf("-"); if (attrib.st_mode & S_IXGRP) printf("x"); if (attrib.st_mode & S_ISGID) printf("S"); else printf("-"); if (attrib.st_mode & S_IROTH) printf("r"); else printf("-"); if (attrib.st_mode & S_IWOTH) printf("w"); else printf("-"); if (attrib.st_mode & S_IXOTH) printf("x"); else printf("-"); } printf("\n\n"); } } void zugriff () { char pfad[300]; struct stat attrib; int auswahl; printf("Welcher Datei die Zugriffsrechte aendern: "); scanf("%s", pfad); printf("Geben Sie die Zugriffsrechte in oktalem Format z.B: 0644: "); scanf("%d", &auswahl); if (chmod (pfad, auswahl) < 0) fprintf(stderr, "Fehler bei chmod: %s\n", strerror(errno)); } void realid () { char pfad[300]; int i; printf("Welche Datei erfragen: "); scanf("%s", pfad); for (i = 0;i < 1;i++) { if (access (pfad,F_OK) < 0) fprintf(stderr,"Datei existiert nicht. Grund: %s\n",strerror(errno)); else { if (access(pfad,R_OK) < 0) printf("-"); else printf("r"); if (access (pfad, W_OK) < 0) printf("-"); else printf("w"); if (accesss (pfad, X_OK) < 0) printf("-"); else printf("x"); if (open(pfad,O_WRONLY) < 0) printf(" -(effektiv\n"); else printf(" w(effektiv)\n"); } } } int main () { int m1; for (;;) { printf("[0] Beenden.\n"); printf("[1] Dateiattributen und Zugriffsrechte.\n"); printf("[2] Zugriffsrechte aendern.\n"); printf("[3] Zugriffserlaubnis fuer reale UID/GID auf einer Datei.\n"); scanf("%d",&m1); switch (m1) { case 0 : exit (0); case 1 : dateiattribut (); break; case 2 : zugriff (); break; case 3 : realid (); break; } } exit (0); }
-
dein code ist hoffnungslos kaputt.
fang von vorne an. ich fuer meinen teil nehm dir nicht die arbeit ab, in dem urwald herauszufinden, was los ist.
sorry. die lektion brauchst du.dieses beispielprogramm konnte ich kompilieren, bei deinem hat sich der compiler mit "undefined reference to `_accesss'" verabschiedet.
#include <stdio.h> #include <unistd.h> int main(void) { printf("access() returned %d", access("foo.c", R_OK)); return 0; }
-
Ja lol bei dem Typo kein Wunder
if (accesss (pfad, X_OK) < 0) printf("-");
//edit: typo entfernt
-
naja, das ist alles vom buch abgeschrieben
Und die fehlermeldung "undefined reference to `_accesss'" hab ich ja auch. Deshalb frage ich wieso der gekommen ist, wo doch alles in ordnung ist.
-
es ist NICHT alles in ordnung, deshalb KAM der fehler ja auch.