Bonjour,
Je suis actuellement en train d'apprendre les signaux sur Linux. Pour celà, je m'entraîne sur un exercice, qui me demande de faire une recherche dans un tableau d'entier. Cette recherche est faites par deux processus fils qui doivent se diviser la tâche en deux (un qui recherche dans la première moitié du tableau et l'autre dans la deuxième partie.). J'ai fait cette partie !
Maintenant, on me demande d'interompre l'autre processus fils que l'entier est trouvé en utilisant les signaux.
Voici ce que j'ai fait précédement :
Merci d'avance !Code:#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <time.h> #include "gestion.h" void Recherche_Tab(int tab[],int taille, int x); bool IsEven(int x); int main(int argc, char *argv[]){ pid_t pid_fils1 = -1; pid_t pid_fils2 = -1; int N, i, x; int *tab; // Appliquer les signaux au gestionnaire AddSignal(); // Demander la taille du tableau printf("Quelle est la taille du tableau ? "); scanf("%d",&N); tab = (int *)malloc(N*sizeof(int)); // Demander les valeurs du tableau printf("Entrez les valeurs dans votre tableau : "); for(i=0;i<N;i++){ scanf("%d",&tab[i]); } // Demander la valeur à chercher printf("Quel entier voulez-vous chercher ? "); scanf("%d",&x); // Création de deux processus fils pid_fils1 = fork(); pid_fils2 = fork(); if(pid_fils1 == 0){ // Rechercher dans le tableau jusqu'à la moitié Recherche_Tab(tab,N/2,x); sleep(10); exit(EXIT_SUCCESS); } if(pid_fils2 == 0){ // Si la taille du tableau est paire if(IsEven(N)){ Recherche_Tab(&tab[N/2],N/2,x); } else{ Recherche_Tab(&tab[N/2],(N/2)+1,x); } sleep(10); exit(EXIT_SUCCESS); } return EXIT_SUCCESS; } /********************************************************** * Recherche_Tab() * * role : rechercher une valeur dans un tableau * intput : tab : tableau d'entier * taille : taille du tableau * x : entier recherché *********************************************************/ void Recherche_Tab(int tab[],int taille, int x){ int i; for(i=0;i<taille;i++){ if(tab[i] == x){ printf("Trouve par %d!!\n",getpid()); } } } /********************************************************** * IsEven() * * role : permet de savoir si un entier est pair * intput : x : entier * output : false : l'entier est impair * true : l'entier est pair *********************************************************/ bool IsEven(int x){ return (x%2) == 0; }
Dylan
-----