2009-08-27 5 views
6

Die folgende Zeile in meinem C-Programm sollte alles/Gruppe/Eigentümer Lese- und Schreibberechtigungenmkfifo Dateiberechtigungen ausgeführt werden, nicht korrekt

mkfifo("/tmp/dumbPipe", 0666) 

vorgesehen Aber einmal ausführen ich den Code und überprüfen Sie die Erlaubnis nicht von der Schreib Bits gesetzt wurden, habe ich am Ende mit

prw-r--r-- 

die Besitzer die gleichen sind, ist es ein Problem, da ich das Rohr in das tmp-Verzeichnis bin erstellen? Wenn ich chmod 666 von der cmd-Zeile aus starte, werden alle Berechtigungen korrekt gesetzt.

Antwort

9

Dies ist ein no-comments Post, nur Handbücher zitiert. Brievity usw.

Zitat von Mann 3 mkfifo:

Es wird von der umask des Prozesses geändert wird auf die übliche Art und Weise: die Berechtigungen der erstellten Datei sind (Modus & ~ umask).

Zitat von Mann 2 umask

Der typische Standardwert für den Prozess umask ist S_IWGRP | S_IWOTH (Oktal 022). Im üblichen Fall, in dem der Modus Argument open (2) angegeben wird als:

 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH 

    (octal 0666) when creating a new file, the permissions on the resulting file will be: 

     S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH 

    (because 0666 & ~022 = 0644; i.e., rw-r--r--). 
0

Salam, Ich weiß, es ist zu spät, aber für andere Benutzer wähle ich diesen Kommentar schreiben Auch wenn Sie präzise 0666 als Erlaubnis, sollten Sie wissen, dass es einen anderen Faktor gibt, der "Dateierstellung des Prozessmodus" genannt wird, also die Frage ist:

, wie man gegenwärtige Prozessakte Moduserschaffung ändert?

Antwort: Verwendung umask (Erlaubnis) zu Beginn des Programms - und gibt 0000 als Erlaubnis

http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

dies soll helfen.