Dringend: umask / chmod in C

Danny4

Danny4

Grünschnabel
Hallo, bis zu einer Prüfung am Montag hoffe ich auf Hilfe.

Das Prinzip von chmod & umask ist mir eugentlich klar. 777 - 022 = 755. Nun habe ich folgenden C-Quelltext:
Code:
#include <stdio.h>
int main()
{
	umask(022);
	int fd1 = creat("a.txt", 0731);
	
	umask(156);
	int fd2 = creat("b.txt", 0731);
}

Nach dem Compilieren und Ausführen habe ich folgende Rechte auf den Dateien:
a.txt: -rwx--x--x
b.txt: -r-x-----x

Das sind für a.txt 711 und für b.txt 501

731 ist ja rwx-wx--x.

Mit der 711 gehe ich noch mit, aber wieso kommt für b.txt 501 raus?

Code:
731: rwx -wx --x
022: 000 010 010
----------------
711: rwx --x --x

aber:
731: rwx -wx --x
156: 001 101 110
----------------
621: rw- -w- --x ??? oder doch 501 ???

Vielleicht habe ich ja nur einen Balken vorm Kopf. Hoffe das mir jemand schnell helfen kann.
 
Code:
731: rwx -wx --x
156: 100 111 000
----------------
501: -rw --- --x

du darfst nicht mit + oder - rechnen, sondern musst eine and-not verknüpfung auf die bitmasken durchführen.

auf bald
oenone
 
Na das wäre ja 301 was bei dir rauskommt. :brav:

Habe mittlerweile erfaharen, dass es am Syntax liegt. Ich muss eine "Null" vor die 156 schreiben, damit es der Compiler als Oktalzahl nimmt. Er hat die 156 jetzt als Dezimal interpretiert.
 
Zurück
Oben