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&section=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 aussieht 😉 und 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.


Anmelden zum Antworten