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
.
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. –