Prechádzať zdrojové kódy

:tada: Ajout fonctions fichiers

Arthur Brandao 6 rokov pred
rodič
commit
ad11d59048
8 zmenil súbory, kde vykonal 216 pridanie a 42 odobranie
  1. 0 37
      Serveur/bomberstudent_server.log
  2. 120 0
      Serveur/file.c
  3. 20 0
      Serveur/file.h
  4. 7 4
      Serveur/makefile
  5. 1 0
      Serveur/map/.gitkeep
  6. 42 0
      Serveur/map/map1
  7. BIN
      Serveur/test
  8. 26 1
      Serveur/test.c

+ 0 - 37
Serveur/bomberstudent_server.log

@@ -1,37 +0,0 @@
------ Log processus 4020 (timestamp : 1542876361) -----
------ Fin log processus 4020 (temps en seconde : 3) -----
------ Log processus 4039 (timestamp : 1542876381) -----
------ Fin log processus 4039 (temps en seconde : 1) -----
------ Log processus 4074 (timestamp : 1542876410) -----
------ Fin log processus 4074 (temps en seconde : 1) -----
------ Log processus 4127 (timestamp : 1542876501) -----
------ Fin log processus 4127 (temps en seconde : 2) -----
------ Log processus 4131 (timestamp : 1542876512) -----
------ Fin log processus 4131 (temps en seconde : 0) -----
------ Log processus 4152 (timestamp : 1542876516) -----
------ Log processus 4231 (timestamp : 1542876605) -----
------ Fin log processus 4231 (temps en seconde : 1) -----
------ Log processus 4627 (timestamp : 1542877404) -----
------ Fin log processus 4627 (temps en seconde : 25) -----
------ Log processus 4699 (timestamp : 1542877518) -----
------ Fin log processus 4699 (temps en seconde : 12) -----
------ Log processus 4738 (timestamp : 1542877574) -----
------ Fin log processus 4738 (temps en seconde : 10) -----
------ Log processus 4804 (timestamp : 1542877617) -----
------ Fin log processus 4804 (temps en seconde : 15) -----
------ Log processus 4840 (timestamp : 1542877658) -----
------ Fin log processus 4840 (temps en seconde : 20) -----
------ Log processus 4894 (timestamp : 1542877751) -----
------ Fin log processus 4894 (temps en seconde : 12) -----
------ Log processus 4950 (timestamp : 1542877782) -----
------ Fin log processus 4950 (temps en seconde : 20) -----
------ Log processus 4984 (timestamp : 1542877816) -----
------ Fin log processus 4984 (temps en seconde : 14) -----
------ Log processus 5025 (timestamp : 1542877874) -----
------ Fin log processus 5025 (temps en seconde : 17) -----
------ Log processus 5082 (timestamp : 1542877903) -----
------ Fin log processus 5082 (temps en seconde : 18) -----
------ Log processus 5123 (timestamp : 1542877998) -----
------ Fin log processus 5123 (temps en seconde : 14) -----
------ Log processus 5156 (timestamp : 1542878017) -----
------ Fin log processus 5156 (temps en seconde : 9) -----

+ 120 - 0
Serveur/file.c

@@ -0,0 +1,120 @@
+/* 
+ * File:   file.c
+ * Author: Arthur Brandao
+ *
+ * Created on 23 novembre 2018
+ */
+
+#define _DEFAULT_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include "error.h"
+#include "str.h"
+#include "file.h"
+
+/* --- Fonctions publiques --- */
+boolean is_dir(const char* path) {
+    struct stat stats;
+    if (stat(path, &stats) == ERR) {
+        addperror("Impossible d'analyser le fichier");
+        return false;
+    }
+    //Verif existence que le chemin est bien un fichier
+    if (S_ISDIR(stats.st_mode)) {
+        return true;
+    }
+    return false;
+}
+
+char** file_list(const char* path, int* nb) {
+    struct dirent **namelist;
+    int scan, nbFile = 0, length;
+    char** result;
+    //Verif que le chemin est bien un dossier
+    if (!is_dir(path)) {
+        adderror("Le chemin n'est pas un dossier");
+        if (nb != NULL) {
+            *nb = ERR;
+        }
+        return NULL;
+    }
+    //Scan le repertoire
+    scan = scandir(path, &namelist, 0, alphasort);
+    if (nbFile < 0) {
+        addperror("Impossible de scanner les fichiers");
+        if (nb != NULL) {
+            *nb = ERR;
+        }
+        return NULL;
+    }
+    //Compte le nombre de fichier dans le dossier
+    int i = scan;
+    while (i--) {
+        if (namelist[i]->d_type == DT_REG && namelist[i]->d_name[0] != '.') {
+            nbFile++;
+        }
+    }
+    //Si le dossier est vide
+    if (nbFile == 0) {
+        if (nb != NULL) {
+            *nb = 0;
+        }
+        return NULL;
+    }
+    //Ajout des resultats dans la variable
+    result = malloc(sizeof (char*) * nbFile);
+    for (int i = scan - 1, j = 0; i >= 0; i--, j++) {
+        //Ne prend que les fichiers non cachés
+        if (namelist[i]->d_type == DT_REG) {
+            length = strlen(namelist[i]->d_name) + 1;
+            result[j] = malloc(sizeof (char) * length);
+            memset(result[j], 0, length);
+            strncpy(result[j], namelist[i]->d_name, length - 1);
+        }
+    }
+    //Retourne chaine + ajout nombre de resultat
+    if (nb != NULL) {
+        *nb = nbFile;
+    }
+    return result;
+}
+
+char* file_get_content(const char* path) {
+    int fd;
+    off_t size;
+    char* result;
+    //Ouverture du fichier
+    fd = open(path, O_RDONLY);
+    if (fd == ERR) {
+        addperror("Impossible d'ouvrir le fichier");
+        return NULL;
+    }
+    //Recup la taille du fichier
+    size = lseek(fd, 0L, SEEK_END);
+    if (size == ERR) {
+        addperror("Impossible de récupèrer la taille du fichier");
+        return NULL;
+    }
+    //Creation de la chaine
+    result = malloc(sizeof (char) * (size + 1));
+    memset(result, 0, size + 1);
+    //Retour au debut + lecture du fichier
+    if (lseek(fd, 0L, SEEK_SET) == ERR) {
+        addperror("Impossible de revenir au debut du fichier");
+        free(result);
+        return NULL;
+    }
+    if (read(fd, result, size) == ERR) {
+        addperror("Impossible de lire le contenu du fichier");
+        free(result);
+        return NULL;
+    }
+    //Retourne la taille de la chaine
+    return result;
+}

+ 20 - 0
Serveur/file.h

@@ -0,0 +1,20 @@
+/* 
+ * File:   file.h
+ * Author: Arthur Brandao
+ *
+ * Created on 23 novembre 2018
+ */
+
+#ifndef FILE_H
+#define FILE_H
+
+/* --- Include --- */
+#include "constante.h"
+
+/* --- Fonctions --- */
+boolean is_dir(const char*);
+char** file_list(const char*, int*);
+char* file_get_content(const char*);
+
+#endif /* FILE_H */
+

+ 7 - 4
Serveur/makefile

@@ -3,7 +3,7 @@
 #
 
 EXEC = main test
-OBJETS = str.o json_parser.o json_encoder.o error.o arraylist.o server_tcp.o server_udp.o bomberstudent_server.o client.o
+OBJETS = str.o json_parser.o json_encoder.o error.o arraylist.o server_tcp.o server_udp.o bomberstudent_server.o client.o file.o
 NOM_PROJET = Projet Reseau
 
 #
@@ -102,7 +102,10 @@ arraylist.o: arraylist.c str.h arraylist.h constante.h server.h json.h
 server_tcp.o: server_tcp.c error.h server.h constante.h
 server_udp.o: server_udp.c error.h server.h constante.h
 bomberstudent_server.o: bomberstudent_server.c arraylist.h constante.h \
- server.h json.h str.h bomberstudent_server.h error.h
+ server.h json.h str.h bomberstudent_server.h client.h error.h
 client.o: client.c client.h constante.h server.h
-main.o: main.c json.h str.h constante.h arraylist.h server.h error.h \
- bomberstudent_server.h
+file.o: file.c error.h str.h file.h constante.h
+main.o: main.c error.h bomberstudent_server.h constante.h server.h json.h \
+ str.h client.h main.h
+test.o: test.c json.h str.h constante.h arraylist.h server.h error.h \
+ bomberstudent_server.h client.h file.h

+ 1 - 0
Serveur/map/.gitkeep

@@ -0,0 +1 @@
+ 

+ 42 - 0
Serveur/map/map1

@@ -0,0 +1,42 @@
+------------------------------------------
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+-________________________________________-
+-****************************************-
+------------------------------------------

BIN
Serveur/test


+ 26 - 1
Serveur/test.c

@@ -7,6 +7,7 @@
 #include "error.h"
 #include "bomberstudent_server.h"
 #include "client.h"
+#include "file.h"
 
 /* --- Extern --- */
 extern Error error;
@@ -161,6 +162,28 @@ void notify(){
     notify_client(cli, "POST", "test", &je);
 }
 
+int files(){
+    char** result = NULL, * content = NULL;
+    char path[500];
+    int length;
+    result = file_list("map", &length);
+    if(length == ERR){
+        return 0;
+    }
+    for(int i = 0; i < length; i++){
+        printf("Name : %s\n", result[i]);
+        sprintf(path, "map/%s", result[i]);
+        content = file_get_content(path);
+        if(content != NULL){
+            printf("Content :\n%s\n", content);
+            free(content);
+        }
+        free(result[i]);
+    }
+    free(result);
+    return 1;
+}
+
 int main(){
     //return parse();
     //return encode();
@@ -168,7 +191,7 @@ int main(){
     //return serv_udp();
     //return serv_tcp();
     
-    //*
+    /*
     error_finit("bomberstudent_server.log");
     ini_server();
     add_handler("POST", "aze/rty", handler);
@@ -185,4 +208,6 @@ int main(){
     sleep(15);
     error.exit();
     //*/
+    
+    return files();
 }