Author Topic: FileMode ?  (Read 316 times)

Lukas

  • Newbie
  • *
  • Posts: 1
    • View Profile
FileMode ?
« on: March 26, 2017, 04:37:56 pm »
Bonjour,
Je viens de m'interesser il y a peu a Anubis et j'aurais une petite question :
J'ai besoin de créer un fichier et d'écrire dedans.
Dans mes recherches, j'ai vu qu'il y avait un attribut FileMode lorsqu'on utilise la fonction file().
Par exemple, file(filename, read) permet de lire ce qu'il y a dans un fichier.
Que puis-je mettre a la place de read afin d'écrire dans le fichier ?
Merci d'avance.

totoro

  • Administrator
  • Newbie
  • *****
  • Posts: 29
    • View Profile
    • Calexium
Re: FileMode ?
« Reply #1 on: March 28, 2017, 06:32:26 pm »
Bonjour Lukas,

toutes réponses se trouvent dans le fichier /library/predefined.anubis
chapitre 5.2 à partir de la ligne 1348.

Code: [Select]
      *** (5.2) Unix file system interface.

public type ReadMode:
  non_readable,             // -
  readable.                 // r

public type WriteMode:
  non_writable,             // -
  writable.                 // w

public type ExecMode:
  non_executable,           // -
  executable.               // x

public type PrivilegedExecMode:
  non_executable,           // -
  executable,               // x                                 
  may_change_id_no_exec,    // S     undocumented (?) Unix: means suid (guid) bit set but not executable
  may_change_id.            // s                           

public type FileMode:                          // corresponding UNIX permission
  file(ReadMode user_readable,                 // r--------
       WriteMode user_writable,                // -w------- 
       PrivilegedExecMode user_executable,     // --x------   --s------    --S------
       ReadMode group_readable,                // ---r-----   
       WriteMode group_writable,               // ----w----   
       PrivilegedExecMode group_executable,    // -----x---   -----s---    -----S---
       ReadMode others_readable,               // ------r-- 
       WriteMode others_writable,              // -------w-
       ExecMode others_executable).            // --------x

Mais les filemode ne serviront à rien pour ce que vous voulez faire.
Je vous conseille plutôt de regarder du coté du chapitre (5.1) Opening files. et ( 5.8 ) Reading and writing files

ouvrir un fichier en lecture


public type ReadFileMode:   
   read.                       // this is for reading in the file (from the beginning)

public define Maybe(RStream)  file(String filename, ReadFileMode mode).

ouvrir un fichier en écriture

public type ReadWriteFileMode:
   new,                        // this creates a new empty file
   append.                     // you can write at the end of an existing file

public define Maybe(RWStream) file(String filename, ReadWriteFileMode mode).

Voici le code pour ouvrir un fichier en lecture

 if (Maybe(RStream)) file(file_name_path, read) is
 {
    failure then print("erreur d'ouverture du fichier"),
    success(fd) then <-- à partir de maintenant vous pouvez utiliser le fd un peu comme le file descriptor C, mais complètement différent en Anubis
 }

ADreNaLiNe-DJ

  • Administrator
  • Newbie
  • *****
  • Posts: 17
    • View Profile
Re: FileMode ?
« Reply #2 on: March 28, 2017, 06:44:01 pm »
Bonjour,

Pour compléter la réponse de totoro.

Dans le "chapitre" (5.1) Opening files du fichier "predefined.anubis" (qu'il ne faut pas inclure), il est définit 2 signatures pour la fonction file:
  • la première prend en paramètre un "ReadFileMode" en plus du nom du fichier et renvoie un "RStream": un Stream en lecture seule. C'est utile lorsque l'on souhaite lire un fichier uniquement.
  • le seconde prend en paramètre un "ReadWriteFileMode" en plus du nom du fichier et renvoie un "RWStream": un Stream en lecture ET en écriture. C'est utile lorsque l'on souhaite lire et/ou écrire dans un fichier.

Dans votre cas, si vous souhaitez écrire dans un fichier, il faudra privilégier la seconde signature et choisir le mode "new" ou "append" définit dans le type énuméré "ReadWriteFileMode".
Code: [Select]
 if (Maybe(RWStream)) file("monfichier.txt", new) is
 {
    failure then print("erreur d'ouverture du fichier"),
    success(fd) then <-- à partir de maintenant vous pouvez utiliser le fd un peu comme le file descriptor C, mais complètement différent en Anubis
 }
ou
Code: [Select]
 if (Maybe(RWStream)) file("monfichier.txt", append) is
 {
    failure then print("erreur d'ouverture du fichier"),
    success(fd) then <-- à partir de maintenant vous pouvez utiliser le fd un peu comme le file descriptor C, mais complètement différent en Anubis
 }
« Last Edit: March 28, 2017, 06:47:52 pm by ADreNaLiNe-DJ »

 

SimpleMachines Appliance - Powered by TurnKey Linux