Unterschied zwischen chmod() und umask()



  • wenn ich in eine Datei schreibe und die Datei alle les-, schreib- und ausführbar machen will, gehe ich üblicherweise derart vor:

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    
    int main(void) {
    
      FILE *stream;	
      stream = fopen("/tmp/test", "a+");
      if (NULL != stream)
      {
         fprintf(stream,"das ist ein Testeintrag.\n");
         fclose(stream);		
      } 
      chmod("/tmp/test",S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
      return 1;
    
    }
    

    Jetzt habe ich gesehen, dass an anderer Stelle mit

    umask 0
    

    gearbeitet wird. Laut Beschreibung setzt

    umask 0
    

    auch schreib-, les- und ausfühbar für alle.

    Kann mir jemand sagen, wann was zu verwenden ist?



  • Unter linux hast du die man pages. Sie sind bei mir auch auf Deutsch. Finde es raus:

    man 2 chmod
    man 2 umask
    

    Torben schrieb:

    Laut Beschreibung setzt

    umask 0
    

    auch schreib-, les- und ausfühbar für alle.

    Nicht in meiner Beschreibung.



  • ich habs noch nicht.
    so wie ich es sehe, wird umask() bei create() verwendet, also, wenn ich will, dass jeder das File lesen können will:

    umask(0);
    create("foo", S_IRUSER|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
    

    aber mit fopen() kann ich doch auch eine Datei erstellen, oder besser gesagt öffnen und wenn sie nicht existiert, erstellen:

    fopen("bar","a+");
    chmod("bar",S_IRUSER|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
    

    warum der Umweg über create(), wenn ich im Grunde doch nur in die Datei schreiben will?



  • warum der Umweg über create(), wenn ich im Grunde doch nur in die Datei schreiben will?

    Keine Ahnung, in welchem Zusammenhang du das Beispiel gesehen hast. Du siehst z.B. das die Reihenfolge der Aufrufe in den zwei Beispielen unterschiedlich ist. umask + create ist fuer das Arbeiten mit einer Datei ungeeignet. umask setzt die Maske fuer alle zukuenftig zu erstellenden Files. D.h. wenn du viele Dateien erzeugst, kannst du dir Arbeit sparen.



  • Die umask sollte in Anwendungen gar nicht gesetzt werden, sondern vom Benutzer um Zugriffsrechte entsprechend überschreiben zu können. In einer Anwendung gibt man die laschesten Rechte an die sinnvoll sind und die umask des Benutzers stutzt diese dann auf das gewünschte Niveau.


Log in to reply