2016-07-30 3 views
0

J'ai appelé Unix.mkdir "test" 0o000 et le répertoire attendu avec rwxrwxrwx autorisations mais avait -------w-. Après l'appel Unix.mkdir "test" (Unix.umask 0o000) J'ai le même résultat.Unix.mkdir définit-il umask correctement?

Je ne comprends pas pourquoi.

Comment créer un répertoire avec rwx autorisations pour tous avec le module OCaml Unix?

+0

La valeur de retour de 'Unix.umask' est l'ancienne valeur de' umask'. De plus, cela n'a pas beaucoup de sens de passer une valeur 'umask' comme permissions désirées. Une valeur umask et une valeur d'autorisation sont, dans un certain sens, spécifiées en utilisant des significations opposées pour leurs bits. –

Répondre

5

La valeur que vous spécifiez à Unix.mkdir correspond aux autorisations que vous voulez attribuer au répertoire, telles que modifiées par votre umask actuel. Si vous spécifiez 0o000, vous devez créer un répertoire sans autorisation pour quiconque. Depuis le umask ne peut que refuser certaines autorisations supplémentaires, votre résultat signalé est impossible, au moins dans Unix.

Notez que le deuxième paramètre à Unix.mkdir n'est pas une valeur umask, c'est une valeur d'autorisations. La raison pour laquelle la documentation OCaml dit de regarder umask est que vous réalisez que la valeur spécifiée sera modifiée par votre umask. Cela fonctionne comme ceci: le répertoire sera créé avec les permissions que vous spécifiez, excepté que tout bit dans votre umask sera effacer dans les autorisations résultantes. En d'autres termes, le umask spécifie les accès que vous souhaitez être refusés par défaut.

Si vous voulez vraiment créer un répertoire avec toutes les autorisations autorisées à tout le monde, vous devez vous assurer que votre umask est 0. Voilà ce qui se passe avec une valeur umask raisonnable 0o022:

$ umask 
0022 
$ ocaml 
     OCaml version 4.02.1 

# #load "unix.cma";; 
# Unix.mkdir "testing1" 0o777;; 
- : unit =() 
# ^D 
$ ls -ld testing1 
drwxr-xr-x 2 jeffsco staff 68 Jul 30 13:43 testing1 

Le Le répertoire result a toutes les permissions autorisées, excepté les permissions 0o022 du umask. (. Pas d'autorisation d'écriture pour le groupe ou autre)

Voici ce qui se passe si vous définissez votre umask-0 avant de créer le répertoire:

$ ocaml 
     OCaml version 4.02.1 

# #load "unix.cma";; 
# Unix.umask 0o000;; 
- : int = 18 
# Unix.mkdir "testing2" 0o777;; 
- : unit =() 
# ^D 
$ ls -ld testing2 
drwxrwxrwx 2 jeffsco staff 68 Jul 30 13:45 testing2 

Lorsque le umask est réglé sur 0, les permissions du répertoire créé sera exactement ceux spécifiés dans l'appel à Unix.mkdir.