IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

deux processus avec fork() diff�rents


Sujet :

POSIX C

  1. #1
    Membre �clair� Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Novembre 2014
    Messages
    428
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es
    Secteur : Administration - Collectivit� locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par d�faut deux processus avec fork() diff�rents
    bonjour;
    alors je veux cr�er deux processus diff�rents (l'un fait l'addition l'autre la multiplication) mais chaque fils ecrase le le code du p�re , j'ai essay� �a mais �a donne des tas d'erreurs

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    #include<stdlib.h>
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/types.h>
     
    /*********************************/
    /*			ADDITION	 		 */
    /*********************************/
    int Add(int x,int y){
    	pid_t P = fork();
    			if(P == 0){
    				printf("je suis le fils addition: PID = %d", getpid() );
    				printf("mon pere: PID = %d", getppid() );
    				Res = x + y;
    				return Res;
    				exit(0);
    			}else if(P < 0){
    				printf("FORK a echoue");
    				exit(1);
    			}else{
    				printf("je suis le pere : PID = %d", getpid() );
    				printf("mon fils: PID = %d", P );
    				wait();
    			}
    }
    /*********************************/
    /*		 MULTIPLICATION 		 */
    /*********************************/
    float Mult(float f,float g){
    	int Res
    	pid_t P = fork();
    			if(P == 0){
    				printf("je suis le fils multiplication: PID = %d", getpid() );
    				printf("mon pere: PID = %d", getppid() );
    				Res = f * g;
    				return Res;
    				exit(0);
    			}else if(P < 0){
    				printf("FORK a echoue");
    				exit(1);
    			}else{
    				printf("je suis le pere : PID = %d", getpid() );
    				printf("mon fils: PID = %d", P );
    				wait();
    			}
    }
    /*********************************/
    /*			   MAIN 			 */
    /*********************************/
    main(){
    	int P;
    	int x,y;
    	float f,g;
    	float resultat;
    	char choix;
     
    	printf("Donner votre choix (addition/multiplication): A/M");
    	scanf(choix);
     
    	switch (choix){
    		case 'a': 
    			printf("donner deux entiers:");
    			scanf(x,y);
    			resultat = Add(x,y);
    			break;
     
    		case 'm':
    			printf("donner deux reels:");
    			scanf(f,g);
    			resultat = Mult(f,g);
    			break;
     
    		default:
    			printf("faux caractere!");
    	}
     
    }

  2. #2
    Membre tr�s actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    551
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : No Comment
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 551
    Par d�faut
    Bonjour
    J'aimerais comprendre pourquoi vous essayer de faire un fork() dans les fonctions respectives ( addition & multiplication) ?
    Ce que moi j'ai compris, c'est que vous souhaiter ex�cuter par le fils une addition et le p�re une multiplication et dans ce cas en pourrait tr�s bien �crire:
    Code C : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
     
    int f_Exe( const pid_t id, const int x, const int y ){
    	return( ( id == 0) ? (x+y) : (x*y) );
    }
     
    int main( void ){
     
    	int x = 10;
    	int y = 10;
    	pid_t id = fork();
     
    	if( (0) == id )
    		printf("(Fils)\t:%d\n", f_Exe(id, x, y) );
    	else
    		printf("(Père)\t:%d\n", f_Exe(id, x, y) );
     
    	return( EXIT_SUCCESS );
    }
    � bient�t

  3. #3
    Membre �clair� Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Novembre 2014
    Messages
    428
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es
    Secteur : Administration - Collectivit� locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par d�faut
    d'abord, l'exercice demande d'ex�cuter deux processus selon le cas (soit addition ou multiplication) et leurs variables sont de diff�rents types comme vous le voyez, et il faut qu'il y ait deux fils mais le p�re lit les variables et affiche le r�sultat seulement

  4. #4
    Membre tr�s actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    551
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : No Comment
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 551
    Par d�faut
    Citation Envoy� par Hind4Dev Voir le message
    d'abord, l'exercice demande d'ex�cuter deux processus selon le cas (soit addition ou multiplication) et leurs variables sont de diff�rents types comme vous le voyez, et il faut qu'il y ait deux fils mais le p�re lit les variables et affiche le r�sultat seulement
    D'abord "bonjour" et ensuite je pense n'avoir pas compris concr�tement ce que l'on vous demande de faire, pourriez-vous �tre plus pr�cis quant � la description de l'�noncer qui vous a �t� fournie.
    Quant aux types de variable diff�rents, une union fera tr�s bien l'affaire et �a l'avantage de regrouper les donn�s en des seuls espaces m�moire.

  5. #5
    Membre �clair� Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Novembre 2014
    Messages
    428
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es
    Secteur : Administration - Collectivit� locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par d�faut
    je sais ce que vous dite mais c'est ce que demande mon exercice pour que nous apprennions � cr�er deux processus qui offrent deux services diff�rents c'est l� le but et non pas de faire un simple calcul, vous voyez?
    j'ai refais quelques lignes voil� le nouveau code:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
     
    /*********************************/
    /*			CALCULATRICE 		 */
    /*********************************/
     
    #include<stdlib.h>
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/wait.h>
     
    /*********************************/
    /*			ADDITION	 		 */
    /*********************************/
    int Add(int x,int y){
    int Res;	
    	pid_t P = fork();
    			if(P == 0){
    				printf("je suis le fils addition: PID = %d", getpid() );
    				printf("mon pere: PID = %d", getppid() );
    				Res = x + y;
    				exit(Res);
    			}else if(P < 0){
    				printf("FORK a echoue");
    				exit(1);
    			}else{
    				printf("je suis le pere : PID = %d", getpid() );
    				printf("mon fils: PID = %d", P );
    				//wait();
    			}
    }
    /*********************************/
    /*		 MULTIPLICATION 		 */
    /*********************************/
    float Mult(float f,float g){
    	float Res;
    	pid_t P = fork();
    			if(P == 0){
    				printf("je suis le fils multiplication: PID = %d", getpid() );
    				printf("mon pere: PID = %d", getppid() );
    				Res = f * g;
    				exit(Res);
    			}else if(P < 0){
    				printf("FORK a echoue");
    				exit(1);
    			}else{
    				printf("je suis le pere : PID = %d", getpid() );
    				printf("mon fils: PID = %d", P );
    				//wait();
    			}
    }
    /*********************************/
    /*			   MAIN 			 */
    /*********************************/
    main(){
    	int P;
    	int x,y;
    	inr resultat1;
    	float f,g;
    	float resultat2;
    	char choix;
     
    	printf("Donner votre choix (addition/multiplication): A/M");
    	scanf(choix);
     
    	switch (choix){
    		case 'a': 
    			printf("donner deux entiers:");
    			scanf(x,y);
    			Add( x, y);
    			printf("resultat =" , wait(resultat1) );
    			break;
     
    		case 'm':
    			printf("donner deux reels:");
    			scanf(f,g);
    			Mult(f,g);
    			printf("resultat =" , wait(resultat2) );
    			break;
     
    		default:
    			printf("faux caractere!");
    	}
     
    }

  6. #6
    Membre tr�s actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    551
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : No Comment
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 551
    Par d�faut
    Citation Envoy� par Hind4Dev Voir le message
    je sais ce que vous dite mais c'est ce que demande mon exercice pour que nous apprennions � cr�er deux processus qui offrent deux services diff�rents c'est l� le but et non pas de faire un simple calcul, vous voyez?
    j'ai refais quelques lignes voil� le nouveau code:
    Code C : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    
    /*********************************/
    /*			CALCULATRICE 		 */
    /*********************************/
    
    #include<stdlib.h>
    #include<stdio.h>
    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/wait.h>
    
    /*********************************/
    /*			ADDITION	 		 */
    /*********************************/
    int Add(int x,int y){
    int Res;	
    	pid_t P = fork();
    			if(P == 0){
    				printf("je suis le fils addition: PID = %d", getpid() );
    				printf("mon pere: PID = %d", getppid() );
    				Res = x + y;
    				exit(Res);
    			}else if(P < 0){
    				printf("FORK a echoue");
    				exit(1);
    			}else{
    				printf("je suis le pere : PID = %d", getpid() );
    				printf("mon fils: PID = %d", P );
    				//wait();
    			}
    }
    /*********************************/
    /*		 MULTIPLICATION 		 */
    /*********************************/
    float Mult(float f,float g){
    	float Res;
    	pid_t P = fork();
    			if(P == 0){
    				printf("je suis le fils multiplication: PID = %d", getpid() );
    				printf("mon pere: PID = %d", getppid() );
    				Res = f * g;
    				exit(Res);
    			}else if(P < 0){
    				printf("FORK a echoue");
    				exit(1);
    			}else{
    				printf("je suis le pere : PID = %d", getpid() );
    				printf("mon fils: PID = %d", P );
    				//wait();
    			}
    }
    /*********************************/
    /*			   MAIN 			 */
    /*********************************/
    main(){
    	int P;
    	int x,y;
    	inr resultat1;
    	float f,g;
    	float resultat2;
    	char choix;
    	
    	printf("Donner votre choix (addition/multiplication): A/M");
    	scanf(choix);
    	
    	switch (choix){
    		case 'a': 
    			printf("donner deux entiers:");
    			scanf(x,y); 			
                            Add( x, y);
    			printf("resultat =" , wait(resultat1) );
    			break;
    			
    		case 'm':
    			printf("donner deux reels:");
    			scanf(f,g);
    			Mult(f,g);
    			printf("resultat =" , wait(resultat2) );
    			break;
    			
    		default:
    			printf("faux caractere!");
    	}
    	
    }
    D'accord mais au final vos services font bien des op�rations �l�mentaires ?
    Cependant j'ai remarqu� des erreurs dans ton code surtout sur la fonction de saisie, penses-tu que ton programme compile correctement ?.
    En attendant je poste la variante ci-dessous de ce qui me semble �tre ce que tu souhaites r�aliser
    � bient�t
    Code C : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
     
    int main( void ){
     
    	int x = 10;
    	int y = 10;
    	int i = 0;
    	pid_t id;
     
    	/* 	(0) addition & (1) Multiplication	*/
    	scanf( "%d", &i );
    	switch( i ){
    	case 0:		/*	Addition	*/
    		id = fork();
    		if( (0) > id ){
    			perror("Echec fork\n");
    			exit( EXIT_FAILURE );
    		}
    		printf("(%s PID %d)%s\t:%d\n",(
    				((0) == id) ? "Fils": "Père"),
    				getpid(), "\tAddition", (x+y) );
    		break;
    	case 1:		/*	Multiplication	*/
    		id = fork();
    		if( (0) > id ){
    			perror("Echec fork\n");
    			exit( EXIT_FAILURE );
    		}
    		printf("(%s PID %d)%s\t:%d\n",(
    			((0) == id) ? "Fils": "Père"),
    			getpid(), "\tMultiplication", (x*y) );
    		break;
    	default:
    		printf("Commande inconnue\n");
    		break;
    	}
    	return( EXIT_SUCCESS );
    }

Discussions similaires

  1. [DATA] [MERGE] Deux tables avec identifiants diff�rents
    Par alers dans le forum SAS Base
    R�ponses: 2
    Dernier message: 17/11/2013, 19h09
  2. [AC-2007] ajout de deux tables avec champs diff�rents
    Par cedric pouilly dans le forum Requ�tes et SQL.
    R�ponses: 1
    Dernier message: 09/04/2013, 18h49
  3. Fusionner deux tables avec champs diff�rents
    Par CyberMen dans le forum D�butez
    R�ponses: 6
    Dernier message: 22/08/2012, 18h32
  4. Superposition de deux images avec codage diff�rent
    Par cedji dans le forum Traitement d'images
    R�ponses: 2
    Dernier message: 15/02/2012, 15h12
  5. Lancer un processus avec fork
    Par snfever dans le forum Langage
    R�ponses: 2
    Dernier message: 22/05/2010, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo