瀏覽代碼

:sparkles: Vide le fichier en fonction de la redirection

Loquicom 6 年之前
父節點
當前提交
6f3142ba17
共有 2 個文件被更改,包括 30 次插入0 次删除
  1. 14 0
      parser.c
  2. 16 0
      test

+ 14 - 0
parser.c

@@ -151,6 +151,14 @@ int get_command(Command* c, char* line){
 int set_io(Command* c, char* filename, int redir){
     //Declaration variable
     int file;
+    //Si fichier existe et on supprime
+    if((redir == SHELLRE_OUT || redir == SHELLRE_ERR || redir == SHELLRE_ALL) && access(filename, F_OK) != ERR){
+        if(unlink(filename) == ERR){
+            addperror("Impossible de supprimer le fichier");
+            serrno = SEOPENF;
+            return SHELL_ERR;
+        }
+    }
     //Ouverture du fichier
     file = open(filename, O_CREAT | O_RDWR, S_IRWXU);
     if(file == ERR){
@@ -158,6 +166,12 @@ int set_io(Command* c, char* filename, int redir){
         serrno = SEOPENF;
         return SHELL_ERR;
     }
+    //On se met à la fin du fichier
+    if(lseek(file, 0L, SEEK_END) == ERR){
+        addperror("Impossible de se deplacer dans le fichier");
+        serrno = SEOPENF;
+        return SHELL_ERR;
+    }
     //Analyse dans quel descripteur il doit etre mis
     switch(redir){
         case SHELLR_IN:

+ 16 - 0
test

@@ -0,0 +1,16 @@
+command.c
+error.c
+execute.c
+mysh.c
+parser.c
+str.c
+wildcard.c
+0
+command.c
+error.c
+execute.c
+mysh.c
+parser.c
+str.c
+wildcard.c
+0