> Tous les forums > Forum Autres langages
 Lancement de plusieurs processus
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Premium
  Posté le 28/05/2006 @ 13:17 
Aller en bas de la page 
Petit astucien
Bonjour, je suis débutant en programmation systeme, je sollicite votre aide pour m'aider à écrire le main de mon programme. J'explique ce qu'il faut faire :
-avoir plusieurs traceroute s'effectuant simultanément, afin de rassembler des informations le plus vite possible -pouvoir choisir à la volée combien de traceroute on souhaite exécuter en parallèle) -ajouter de nouvelles « cibles » pour traceroute pendant que l'ensemble fonctionne.
Les résultats des traceroute (avec l'option -n) lancés doivent être écrits dans un fichier pour pouvoir analyser les lignes et ainsi créer un graphe. Le parsing et la création du graphe ont été faits, c'est le lancement des traceroutes et l'écriture dans le fichier qui pose problème. Voici ce que j'ai écrit. Il n'est pas complet et aimerait que vous m'aidez pour faire en sorte qu'il le soit. Merci par avance [code]// structure pour gérer une info fils => père typedef struct { info1; info2; info3; info4; //...les infos qu'il faut } t_info; // structure pour gérer un fils et son pipe typedef struct { int cote[2]; // Cotés du pipe int pid; // PID du fils } t_fils; int main(void) { t_fils tabFils[n]; // Tableau des fils int i; // Boucle int nbFils; // Nb fils vivants t_info info; // Info transmise // Création des processus for (i=0; i < n; i++) { // Ouverture du pipe pour le fils vers son père pipe(tabFils[i].cote); // Création du processus fils if ((tabFils[i].pid=fork()) == 0) { // Ici on est dans le fils "i" // On commence par fermer le coté de lecture inutile close(tabFils[i].cote[0]); // Traceroute vers ip X //... // Récupération de toutes les IP situées entre moi et "x" => tableau d'IP //.. // Transmission de ce tableau vers le père par le pipe for (//...) { // Remplissage infos (une des info pourrait être le n° du fils) info.info1=i; info.info2=//... //... (on remplit toutes les infos) // On envoie l'info au père write(tabFils[i].cote[1], &info, sizeof(info); // on envoie une info particulière signifiant "fini" write(tabFils[i].cote[1], "EOT", 4); // Toutes les Ip sont transmises - Fin du fils (mais fermeture pipe avant) close(tabFils[i].cote[1]); exit(0); } // Ici on est dans le père - On n'a rien à faire sauf à fermer le coté d'écriture inutile close(tabFils[i].cote[1]); } // Ici, tous les fils sont lancés - On scrute maintenant les pipes tant qu'il y a des fils nbFils=n; while (nbFils > 0) { // On lit tous les pipes des fils for (i=0; i < n; i++) { // Si le fils "i" n'existe plus on le saute if (tabFils[i].pid == 0) continue; // Lecture du pipe venant du fils "i" if (read(tabFils[i].cote[0], &info, sizeof(info)) > 0) { // Si on a reçu l'info particulière "EOT" if (//... == "EOT") { // On ferme le pipe de ce fils close(tabFils[i].cote[0]); // Le fils a terminé => pid mis à 0 (permettra de ne plus le traiter) tabFils[i].pid=0; // Un fils en moins nbFils--; // Inutile d'en faire plus pour ce crevard continue; } // Ici, on a reçu les infos sur les IP pour le fils "i" //... => on les analyse et on construit le graphe } // ici, soit on n'a rien reçu, soit on a fini de traiter les infos => on reboucle sur le fils suivant sleep(1); } } // Ici, il n'y a plus de fils } [/code]
Publicité
breizhbugs
 Posté le 28/05/2006 à 13:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut, Bon ton probleme ne m'inspire pas trop au niveau du code (en plus j'aime po programer pour linux!) mais au niveau "superieur" je ferais les choses differement (mais bon je sais pas quels sont tes imperatifs non plus). En fait je ferai une structure comma ca: // structure pour gérer un fils et son pipe typedef struct { char *fichier; // traceroute ecrira dans ce fichier. int pid; // PID du fils IP adresse; // @ip a analyser } t_fils; ensuite j'utiliserai pas fork mais les threads. et le principe serait le suivant: PROGRAMME PRINCIPAL: 1 - nbthread = Connaitre le nombre de threads a lancer. 2 - creer un tableau t_fils[nbthread] 3 - initialiser dans une boucle 3.1 - t_fils[i].fichier = fichier i 3.2 - t_fils[i].adresse = genere une adresse au hasard 3.3 - t_fils[i].pid = creation du thread qui lance une commande du genre "traceroute"+ ContenuDe(t_fils[i].adresse) +">"+ ContenuDe(t_fils[i].fichier) 4 - fin boucle init 5 - boucle attente terminaison thread 5.1 - si t_fils[i].pid est fini alors 5.1.1 - rajouter au graphe G le contenu de t_fils[i].fichier 5.2 - fsi 6 - fin boucle attente 7 - Afficher le graphe G. (8 - Nettoyage des fichiers temporaires generer) FIN

Modifié par breizhbugs le 28/05/2006 13:43
Premium
 Posté le 28/05/2006 à 13:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Salut, j'ai pas préciser mais je dois utliser fork(), pipe,... car je n'ai pas vu les threads
breizhbugs
 Posté le 28/05/2006 à 13:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Premium a écrit :
Salut, j'ai pas préciser mais je dois utliser fork(), pipe,... car je n'ai pas vu les threads
Bon ben tant pis pour ma suggestion alors, bon courage.
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
83,99 €SSD externe portable USB 3.1 Crucial X6 1 To à 83,99 € [Amazon Prime]
Valable jusqu'au 22 Juin

Pour ses membres PrimeAmazon fait une promotion sur le SSD externe Crucial CT1000X6SSD9 1 To qui passe à 83,99 € livré gratuitement au lieu de 130 €. Ce SSD externe portable offre des vitesses jusqu'à 540 Mo/s. Il se branche sur un port USB C ou A (adapteur fourni). Il est compatible PC, Mac, PS4, Xbox One, Android.


> Voir l'offre
187,65 €Processeur AMD Ryzen 5 3600 à 187,65 €
Valable jusqu'au 23 Juin

Amazon fait une promotion sur le processeur AMD Ryzen 5 3600 qui passe à 187,65 € livré gratuitement au lieu de plus de 200 €. Le processeur AMD Ryzen 5 3600 Wraith Spire (3.6 GHz / 4.2 GHz) fait partie des premiers processeurs pour PC gravés en 7 nm. Ses 6 coeurs et 12 threads, une fréquence jusqu'à 4.2 GHz et 35 Mo de GameCache le rendent polyvalent, il vous permet de tout faire rapidement et en toute fluidité. En cette période tendue pour les prix des composants informatiques, c'est une bonne affaire.


> Voir l'offre
97,99 €Perceuse sans-fil Bosch Professional GSR 12V-15 + 39 accessoires+2 batteries 2 AH à 97,99 €
Valable jusqu'au 22 Juin

Pour ses membres PrimeAmazon fait actuellement une belle promotion sur la perceuse sans fil Bosch Professional GSR 12V-15 avec 2 batteries 12V 2.0 AH au lithium, sa pochette et 39 pièces d'accessoires à 97,99 € alors qu'on la trouve ailleurs à partir de 140 €. 


> Voir l'offre

Sujets relatifs
Commande batch pour ouvrir plusieurs fichiers windows 8
Batch pour importer plusieurs CSV dans Mysql
Problème de lancement IDLE de Python
Macro excel : regrouper plusieurs fichiers
ouvrir plusieurs fichiers en même temps
Réaliser un projet à plusieurs
Contrôler processus à distance
Probleme de lancement d 'exe dans un .bat
processus en fond
plusieurs JAVA ???
Plus de sujets relatifs à Lancement de plusieurs processus
 > Tous les forums > Forum Autres langages