Wie der Systemaufruf umask() die Berechtigung maskiert

Wie der Systemaufruf umask() die Berechtigung maskiert

Ich verwende umask()Systemaufrufe, um die Dateiberechtigung festzulegen. Ich verwende den folgenden Code:

umask(S_IWGRP | S_IWOTH);
printf("Enter file name that you want to create:");
scanf(" %s",file);
fd = open(file,O_CREAT|O_WRONLY);

Aber nach der Ausführung wird eine Datei mit den unten angegebenen Berechtigungen erstellt

--wS-----T 1 rvi rvi     0 Oct  2 15:20 test.txt

Wofür ist dieses SBit und TBit? Und warum wird es automatisch geändert?

Antwort1

Wenn Sie open mit O_CREAT aufrufen, wird ein drittes Argument für den Modus der Datei erwartet. Die Umask wird dann aus dem von Ihnen angeforderten Modus herausmaskiert. Also zum Beispiel:

umask(S_IWGRP | S_IWOTH /* == 0022 */);
fd = open(file, O_CREAT|O_WRONLY, 0777);

würde eine Datei mit den Flags 0777 & (~0022) = 0755 erstellen, also rwxr-xr-x, wobei:

umask(S_IWGRP | S_IWOTH);
fd = open(file, O_CREAT|O_WRONLY, 0666);

würde eine Datei mit den Flags 0666 & (~0022) = 0644 erstellen, also rw-r--r--. In Ihrem Fall nimmt die Open-Funktion zufällige Daten vom Stapel, da Sie kein Modusargument angegeben haben. Sie wissen also nur, dass die mit umask maskierten Bits deaktiviert sein werden. Versuchen Sie, dem Open-Aufruf den gewünschten Modus anzugeben. 0777 ist eine gute Wahl für ausführbare Dateien und 0666 für nicht ausführbare Dateien.

verwandte Informationen