Konstante O_ACCMODE



  • Hallo zusammen!

    Mir sind bei folgendem Quelltext ein paar Dinge unverständlich.

    Teil des Quelltextes:

    flags = fcntl(fd, F_GETFD, 0);
    modus = flags & O_ACCMODE;
    if(modus == O_RDWR)
      printf("Zum Lesen und Schreiben geöffnet");
    else if(modus == O_RDONLY)
      printf("Zum Lesen geöffnet");
    else if(modus == O_WRONLY)
      printf("Zum Schreiben geöffnet");
    
    if(modus == O_APPEND)
      printf("Am Dateiende schreiben");
    

    Wenn ich das nicht falsch verstanden habe, sehen die Bits der einzelnen Flags wie folgt aus:
    O_ACCMODE -> 0000 0000 0000 0011
    O_RDONLY -> 0000 0000 0000 0000
    O_WRONLY -> 0000 0000 0000 0001
    O_RDWR -> 0000 0000 0000 0010
    O_APPEnD -> 0000 0000 0000 1000

    Das würde doch heißen, das nachdem man flags mit der Konstante O_ACCMODE gefiltert hat das bit für O_APPEND nicht mehr gesetzt ist und die Überprüfung if(modus == O_APPEND) niemals "wahr" ergeben kann. Oder?

    Den kompletten Quelltext findet ihr hier: http://www.pronix.de/pronix-64.html



  • Richtig, aber der Vergleich ist so und so vollkommener Unsinn. Es muss heißen

    if (flags & O_APPEND)
    

    Das O_ACCMODE gibts anscheinend, damit man eine switch-Anweisung mit den Modi O_RDONLY, O_WRONLY, O_RDWR als cases schreiben kann.
    Pronix wurde hier übrigens nicht erst einmal kritisiert ...



  • if (flags & O_APPEND)
    

    Leuchtet ein!

    Was meinst Du mit "Pronix wurde hier übrigens nicht erst einmal kritisiert ..."?

    Vielen Dank für die schnelle Antwort!



  • Hat sich erledigt.

    Ich stand auf der Leitung 😃
    Habe wohl zuviel im Quelltext gewühlt.
    Nochmal Danke!


Anmelden zum Antworten