IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Problème de droit avec Unix.openfile


Sujet :

Caml

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut Problème de droit avec Unix.openfile
    Bonjour,

    Je souhaite ouvrir un fichier en écriture en mode append. Pour cela, j'emploie la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    let fd = Unix.openfile "log.txt" [ O_WRONLY ; O_APPEND ; O_CREAT ] 0o666 in
    Comme vous pouvez le constater, si le fichier n'existe pas, il est créé et je lui accorde les droits en lecture/écriture pour le propriétaire, le groupe et les autres.

    Problème: ça ne fonctionne pas correctement pour la gestion des droits.
    Le fichier créé obtient les droits -rw-r--r--

    Je suis obligé de contourner le problème de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
          let f_existed = Sys.file_exists "log.txt" in
     
          try
    	let fd = Unix.openfile "log.txt" [ O_WRONLY ; O_APPEND ; O_CREAT ] 0o666 in
     
    	  (if f_existed = false then
    	    Unix.fchmod fd 0o666
    	  );
     
    	  ignore (Unix.write fd to_log 0 (String.length to_log));
    	  Unix.close fd
          with Unix_error (err,_,_) ->
    Auriez-vous des explications à ce mystère ?

  2. #2
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    La documentation de Caml sur openfile indique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (** Open the named file with the given flags. Third argument is
       the permissions to give to the file if it is created. Return
       a file descriptor on the named file. *)
    C'est incomplet. J'imagine que Unix.openfile fait appel à la fonction open du C. Là, le manuel est plus complet :
    the file is created with mode mode as described in chmod(2) and modified by the process' umask value (see umask(2)).
    Si tu tapes umask dans un shell, je parie que tu obtiens "022". Pour mettre n'importe quel droit aux fichiers, il faut enlever l'umask en appelant "umask 0".

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    L'ennui, c'est que si je change l'umask, ce sera valable pour tous les futurs fichiers créés.

    Pour celui-ci, il faudrait que je change l'umask avant, je crée le fichier puis je rétablis l'umask.

    Sinon oui, tu as raison, j'ai 0022 dans mon terminal.

  4. #4
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Quand tu modifies l'umask, c'est seulement pour ton processus en cours.
    Si tu en as besoin dans la suite de ton code, il faut restaurer l'umask juste après (c'est facile : la fonction umask te renvoie l'ancienne valeur du masque) ; sinon, tu peux le laisser à 0, ce n'est pas gênant, je pense.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Dans ce cas, je préfère encore utiliser le fchmod.

Discussions similaires

  1. [Snow Leopard] Problème de droits avec un dossier, ses sous-dossier et ses fichiers
    Par rambc dans le forum Apple
    Réponses: 21
    Dernier message: 07/03/2010, 10h18
  2. problème de droits avec vsftpd
    Par BamBi25 dans le forum Administration système
    Réponses: 0
    Dernier message: 03/03/2010, 16h14
  3. Problème de droits avec des serveurs virtuels
    Par xave dans le forum Apache
    Réponses: 8
    Dernier message: 21/10/2009, 15h36
  4. problème de droits avec crontab
    Par kaele dans le forum Administration système
    Réponses: 2
    Dernier message: 30/03/2009, 17h25
  5. [FTP] Problème de droit avec rmdir
    Par Phenomenium dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2006, 01h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo