//Declaration des librairies #include #include #include //Declaration des constantes #define ARGUMENT_COMMANDE 5 //Nombre d argument dans la commande #define POSITION_EMETTEUR 2 //Position de l emetteur dans la commande #define POSITION_DESTINATAIRE 3 //Position du destinataire dans la commande #define POSITION_MESSAGE 4 //Position du message dans la commande #define LONGUEUR_LIGNE 255 //Nombre de caracteres maxi dans une ligne du fichier decrivant le reseau #define NOMBRE_LIAISON_MAX 4 //Nombre de liaisons maximales par noeud //Declaration des structures //Message struct message{ char* contenu; char* depart; char* arrivee; }message; //Noeud struct noeud { char *nom; struct noeud *noeud_liaison[NOMBRE_LIAISON_MAX]; }noeud; struct noeud *tableau_noeud; //Declaration des variables FILE *pointeur_fichier; //Pointeur servant a l ouverture du fichier de description du reseau char* emetteur=NULL; //Pointeur servant a recuperer l emetteur dans la commande char* destinataire=NULL; //Pointeur servant a recuperer le destinataire dans la commande char* fichier_donnee=NULL; //Pointeur servant a recuperer le nom du fichier de description du reseau dans la commande char ligne[LONGUEUR_LIGNE]; //Ligne comportant LONGUEUR_LIGNE comme maximum de caracteres int nombre_lignes_lues=0; //Compteur indiquant le nombre de lignes lues dans le fichier int arret_programme=1; //Indicateur d arret du programme initialise a " arret " donc VRAI char* nom_noeud; //Pointeur vers le nom d un nom int nombre_ligne=0; int nombre_noeud; int ligne_noeud=0; int rangement=1; int main (int argc, char *argv[]) { //On verifie que le nombre d argument est bien egal a 5 if (argc != ARGUMENT_COMMANDE) puts("La commande ne comporte pas le nombre d argument requis"); } else { //Le nom du fichier a ouvrir est le premier argument de la commande fichier_donnee=argv[1]; printf("Fichier donnee : %s\n",fichier_donnee); //L emetteur est le second argument de la commande emetteur=argv[POSITION_EMETTEUR]; printf("Emetteur : %s\n",emetteur); //Le destinataire est le troisieme argument de la commande destinataire=argv[POSITION_DESTINATAIRE]; printf("Destinataire : %s\n",destinataire); //Le message est le quatrieme argument de la commande //Message de longueur variable on lui alloue l espace necessaire message.contenu=malloc(sizeof(char)*strlen(argv[POSITION_MESSAGE])); //On verifie l allocation de la memoire if (message.contenu == NULL) { puts("Allocation memoire pour le message impossible"); } else { //Allocation bien effectuee on remplit la zone memoire avec le message strcpy(message.contenu,argv[POSITION_MESSAGE]); printf("Message : %s\n",message.contenu); //Indicateur de lancement de programme positionne sur ok arret_programme=0; } } //Lancement de programme reussi on poursuit l execution while (arret_programme == 0) { //Premiere lecture du fichier afin de recuperer le nombre de lignes lues pointeur_fichier = fopen(fichier_donnee, "r"); //On verifie l ouverture du fichier if (pointeur_fichier == NULL) { puts("Fichier introuvable"); break; } //On lit le fichier dans le but de recuperer le nombre de ligne lues else { while (fgets(ligne, sizeof ligne,pointeur_fichier),!feof(pointeur_fichier)) { nombre_lignes_lues++; } } //Creation du tableau de pointeur de structure de noeud afin de faciliter la creation du reseau tableau_noeud=malloc(nombre_lignes_lues*sizeof(struct noeud)); if (tableau_noeud == NULL) { puts("Allocation memoire tableau non reussie"); arret_programme=1; } //Seconde lecture du fichier afin de creer chaque noeud et determiner le nombre de noeud pointeur_fichier = fopen(fichier_donnee, "r"); if (pointeur_fichier == NULL) { puts("Fichier introuvable"); break; } else { while (fgets(ligne, sizeof ligne,pointeur_fichier),!feof(pointeur_fichier)) { nom_noeud=strtok(ligne," "); if (nom_noeud == NULL) { puts("Ligne vide"); } else { printf("Nom noeud : %s",nom_noeud); for(nombre_ligne=0; nombre_ligne < nombre_lignes_lues; nombre_ligne++) { if (strcmp(nom_noeud,(tableau_noeud[nombre_ligne]).nom) == 0) { puts("Noeud pas unique"); rangement=0; } } if (rangement == 1) { puts("Noeud unique\n"); strcpy(tableau_noeud[ligne_noeud].nom,nom_noeud); nombre_noeud++; } } ligne_noeud++; } printf("Nombre noeud : %d",nombre_noeud); } arret_programme=1; } }