Rechte über Programm ausgeben ?
-
Hallo Leute wie bekomme ich die Rechte einer über die Kommandozeile übergebenen Datei ausgegeben .
Muss ich dies über die lstat funktion realisieren um mir dann aus der st_mode die Rechte zu berechnen ? Oder gibt es da einen einfachere Möglichkeit .Mfg
-
Wie du sagst: Über stat und st_mode.
s.st_mode & 0777
gibt dir die Rechte im Oktalformat. Aber siehe http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html
-
Ich habe es jetzt so gemacht ..
Hab ich mir das rihtig überlegt ?void printRights(struct stat *info) { printf("\nRIGHTS:"); if((info->st_mode & 0777) == S_IRWXU)printf("\nread,write,execute perm: owner"); if((info->st_mode & 0777) == S_IRUSR)printf("\nread permission: owner"); if((info->st_mode & 0777) == S_IWUSR)printf("\nwrite permission: owner"); if((info->st_mode & 0777) == S_IXUSR)printf("\nexecute/search permission: owner"); if((info->st_mode & 0777) == S_IRWXG)printf("\nread,write,execute perm: group"); if((info->st_mode & 0777) == S_IRGRP)printf("\nread permission: group"); if((info->st_mode & 0777)== S_IWGRP)printf("\nwrite permission: group"); if((info->st_mode & 0777)== S_IXGRP)printf("\nexecute/search permission: group"); if((info->st_mode & 0777)== S_IRWXO)printf("\nread,write,execute perm: other"); if((info->st_mode & 0777)== S_IROTH)printf("\nread permission: other"); if((info->st_mode & 0777)== S_IWOTH)printf("\nwrite permission: other"); if((info->st_mode & 0777) == S_IXOTH)printf("\nexecute/search permission: other"); }
-
Nicht ganz - die einzelnen Werte können/müssen miteinander kombiniert vorkommen, du prüfst nur, ob genau eins dieser Rechte gesetzt ist. Besser ist es, mit Bit-Operationen die einzelnen Flags auszuwerten:
if(info->st_mode & S_IRUSR)printf("\nread permission: owner"); if(info->st_mode & S_IWUSR)printf("\nwrite permission: owner"); if(info->st_mode & S_IXUSR)printf("\nexecute/search permission: owner");
-
Jo hab es jetzt hinbekommen .
Thx