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

 C Discussion :

Prog Creation N fils (anneau) en Systeme Unix


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Prog Creation N fils (anneau) en Systeme Unix
    Bonjour à tous les developpeurs et pro je voudrais que vous m'aidez a ecrire un Programme en systeme de linux qui est apartire d'un père on creer n fils (anneau) et le pere envoies a son fils a droite un chiffre et le fils incremente le valeur (+1) et envoie le nouveau valeur au fils suivant et le fils suivant a son tour ajoute (+1) et il envoie jusqu'a le pèere apre le pere affiche le nouvelle valeur.

    voila le programme que j'ai fait mon programme ne marche pas du tou il m'affiche des erreurs par tout:
    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <time.h>
     
    int main (int argc, char * argv[])
    {
    	int i,in,out,j,score;
    	int score_d = 0;
    	int score_g = 0;
    	in election = 1;
    	int * score = (int*) malloc (sizeof(int)*atoi(argv[1]));
    	int * status = (int*) malloc (sizeof(int)*atoi(argv[1]));
    	int * droite = (int*) malloc (2*sizeof(int)*atoi(argv[1]));
    	int * gauche = (int*) malloc (2*sizeof(int)*atoi(argv[1]));
    	time_t t;
     
    	for (i = 0 ; i < atoi(argv[1]) ; i++)
    	{
    		pipe(&droite[2*i]);
    		pipe(&gauche[2*(i+atoi(argv[1]-1)]);
     
    		time(&t);
    		srand(t*getpid()*(i+1));
    		score[i] = (int)rand()*10.0/RAND_MAX;
    		status[i] = 1;
    	}
     
    	in_droite = droite[((2*i)-2)%(2*atoi(argv[1]))];
    	out_droite = droite[((2*i)+1)%(2*atoi(argv[1]))];
     
    	in_gauche = gauche[((2*i)+2)%(2*atoi(argv[1]))];
    	out_gauche = gauche[((2*i)-1)%(2*atoi(argv[1]))];
     
    	if(argc == 2)
    		exit(0);
     
    	while(election == 1)
    	{
    		for(i = 1 ; i < atoi(argv[1]) ; i++)
    		{
    			if(fork() == 0)
    			{
    				if(j == 0)
    				{
    					score = score[i];
    					printf("Score associe au processus numero %d : %d\n",i,score);
    				}
    				else
    					printf("Score associe au processus numero %d : %d\n",i,buf);
     
     
    				in_droite = droite[((2*i)-2)%(2*atoi(argv[1]))];
    	   			out_droite = droite[((2*i)+1)%(2*atoi(argv[1]))];
     
    	   			in_gauche = gauche[((2*i)+2)%(2*atoi(argv[1]))];
    	   			out_gauche = gauche[((2*i)-1)%(2*atoi(argv[1]))];
     
    				//------- Cas d'echec ------//
     
    				//Reception
    				read(in_droite,&score_d,sizeof(int));
    				printf ("Fils numero %d recupere à droite : %d\n",i,score_d);
     
     
    				read(in_gauche,&score_g,sizeof(int));
    				printf ("Fils numero %d recupere à gauche : %d\n",i,buf);
     
    				//Evaluation
    				if(score_d < score_g)
    					score = score_g;
    				else
    					score = score_d;
     
    				//Envoi
    				printf ("Fils numero %d envoie à droite : %d\n",i,score);
    				write(out_droite,&score,sizeof(int));
    				printf ("Fils numero %d envoie à gauche : %d\n",i,score);
    				write(out_gauche,&score,sizeof(int));
    				exit(0);
    			}
    		}
     
    		if(j == 0)
    		{
    			score = score[0];
    			score_d = score_g = score;
    		}
     
    		printf("Pere envoie : %d\n",score);
    		write(out_droite,&score,sizeof(int));
    		write(out_gauche,&score,sizeof(int));
     
    		read(in_droite,&score_d,sizeof(int));
    		printf("Pere recupere : %d\n",score_g);
     
    		read(in_gauche,&score_g,sizeof(int));
    		printf("Pere recupere : %d\n",score_d);
    		printf("---------------------------------\n");
    	}
    	exit(0);
    }

    merci

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    Salut,

    alors dans l'ordre :
    1. ta variable score est déclaré 2 fois en int et en int*, va falloir changer le nom à une des variables la !
    2. ce n'est pas in election; mais int election; qu'il faut mettre
    3. tu as oublié d'inclure unistd.h pour pipe, getpid, ....
    4. à la ligne 21, tu as oublié une parenthèse fermante
      Code C : Sélectionner tout - Visualiser dans une fenêtre à part
      pipe(&gauche[2*(i+atoi(argv[1]-1)]);
      devient
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      pipe(&gauche[2*(i+atoi(argv[1]-1)]);
    5. tu n'as pas déclaré les variables in_droite,out_droite, ....


    voila entre autre va falloir corriger ca
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

Discussions similaires

  1. systeme unix tubes + anneau
    Par ould64 dans le forum Linux
    Réponses: 6
    Dernier message: 11/06/2008, 11h25
  2. Recuperation base oracle 8 sur un systeme UNIX
    Par Laye dans le forum Oracle
    Réponses: 7
    Dernier message: 06/12/2006, 11h02
  3. [Systeme][unix]récupérer une variable
    Par mavina dans le forum API standards et tierces
    Réponses: 20
    Dernier message: 19/07/2006, 14h08
  4. Réponses: 4
    Dernier message: 21/12/2005, 15h36
  5. Est il possible de faire planter un système Unix
    Par Patrick PETIT dans le forum Administration système
    Réponses: 15
    Dernier message: 15/06/2004, 15h16

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