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


Anmelden zum Antworten