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 1000Das 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!