Flags überprüfen



  • hi wieder,
    hab folgendes Problem: Ich habe ein struct, in dem ein _mode_t typ ist, der die Flags eines Pfades beinhaltet.

    Folgende Flags sind für das st_mode-Feld definiert:

    S_IFMT 0017000 Bitmaske für die Dateityp-Bitfelder
    S_IFSOCK 0140000 Socket
    S_IFLNK 0120000 symbolische Verknüpfung
    ...

    Weis jemand wie ich überprüfen kann, ob ein Flag gesetzt ist, bzw mir alle gesetzten Flags ausgeben lassen kann? 😕



  • Du solltest dir mal die Bit-Operatoren & (UND), | (ODER), ^ (XOR), ~ (NICHT) ansehen - und damit deine Flag-Sammlung passend zerlegen.

    mode&mask -> alle Flags aus "mask", die in mode gesetzt sind
    mode&flag!=0 -> ist der Wert "flag" gesetzt?

    mode|=flag -> setze "flag"
    mode&=~flag -> lösche "flag"

    ...



  • Hi nochmal, irgendwie komme ihc mit den Flags nicht ganz zurecht. Ich habe es nach deinem Vorschlag probiert:

    cout<<(buf.st_mode&S_IFDIR)<<endl;
    

    und auch nach einem Abschnitt im Internet, welcher meinte:

    FLAG1 = mode & FL_1
    

    würde FLAG1 den Wert von FL_1 zuweisen. Deshalb dachte ich, muss mode & FL_1 ja den Wert zurückgeben(wie dus auch geschrieben hast (!=0) ).

    Warum klappt nun aber der Befehl oben nicht? Als Fehler? kam:

    Stopped due to shared library event

    Hmm, was nun?



  • hat sich erledigt. Ich habe eine Seite gefunden, die Flags super erkärt:
    http://www.willemer.de/informatik/cpp/sysprog.htm

    Danke an alle 😃


Anmelden zum Antworten