# Projet_Q4_Groupe_O4 ## Description des fichiers : @fonctions.h Un fichier header qui reprend les structures utilisées pour les listes chaînées ainsi que les nom des fonctions utilisées dans fonctions.c @fonctions.c Un fichier avec l'implémentation des différentes fonctions décrites dans le fichier header. Dans celui-ci, il y a les fonctions liées aux listes chaînées, une fonction pour trouver les diviseurspremiers d'un nombre donné, une fonction comptant les listes d'un fichier et des fonctions pour initialiser les 2 buffers. @main.c Le code source à compiler pour obtenir le programme @test.c Un fichier reprenant les tests unitaires de nos fonctions @Makefile Le fichier reprenant les commandes à executer pour lancer le code de façon plus agréable ## Lancer le code : - make fact : produit l'exécutable "fact" - make cpp / make cpp_xml : compile le programme et analyse ou donne le rapport d'analyse avec cppcheck - make val / make val_xml : compile le programme et analyse ou donne le rapport d'analyse avec valgrind - make test : compile le programme et exécute les test unitaires - make clean : nettoie le dossier et supprime les exécutables créés - ./fact -N nthreads input.txt output.txt : lance le programme exécutable fact * nthreads : le nombre de threads du programme, un entier >= 1 * input.txt : le nom du fichier input ayant des lignes d'entiers compris entre 2 et 2^(31)-1 * output.txt : le nom du fichier output qui est créé si il n'existe pas encore - ./test : lance le programme exécutable test ## Architecture du code : Notre code est découpé en 3 parties : 1) Lecture (1 thread ) : lit les lignes du fichier input et en stock les entiers dans le buffer_1 2) Calcul (n threads) : prend les entiers du buffer_1, calcul la liste des diviseurs premiers de l'entier et stock cette liste d'entiers dans le buffer_2 3) Ecriture (1 thread ) : prend les listes d'entiers du buffer_2 et les écrit dans le fichier output Les 2 buffers sont protégés par 1 mutex et 2 sémaphores (free et full) chacun ## Bon fonctionnement : Pour un bon fonctionnement du code, il faut respecter quelque règles : 1) Le fichier input doit être composé de lignes ne comportant que des entiers compris entre 2 et 2^(31)-1 avec un seul entier par ligne 2) Le nombre de thread(s) doit être précisé et doit être >= 1 3) Pour un bon fonctionnement de valgrind, il faut que le fichier "example_input.txt" soit dans le même dossier que le Makefile # Projet_Q4_Groupe_O4