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 :

probleme file de message


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Points : 42
    Points
    42
    Par défaut probleme file de message
    Bonsoir à tous,
    voilà j'ai un petit problème, j'envoi un message dans une file de message et je n'arrive hélas pas à le récupérer. Pour info voilà mes strcture pours mes files :

    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
    #ifndef _TYPE_H_
    #define CLE_F1 1664
    #define CLE_F2 5151
     
    struct file1{ // message allant d'un client vers le serveur ou sous serveur
    	long pid_destinataire; // (=1 si destinataire = serveur principal) sinon pid du destinataire 
    	int type_question; // 1 = imprimer ,2 = infos ,3 = annuler
    	int pid; // pid du processus inserant le message
    	char nom_fichier[255]; // nom du fichier
    };
     
    struct file2 { // message allant du sous serveur vers le client
    	long type; // pid du destinataire du message
    	long pid_reponse; // pid du processus qui envoi le message
    	char rep[255]; // message envoyé (numéro d'impression, information ou annulation...)
    };
     
    #endif
    Voici le bout de code de mon client qui m'intéresse :

    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
     
    	// Reservation des segments liés à la file de message
    	int id_file1 = msgget(CLE_F1 ,IPC_EXCL);
            int id_file2 = msgget(CLE_F2,IPC_EXCL);
     
    	if(!strcmp(argv[1],"-p")) {
    		file1.pid_destinataire = 1;
    		file1.type_question = 1;
    		file1.pid = getpid();
    		strcpy(file1.nom_fichier,argv[2]);
    		// Envoi du message et attente de réception...
    		msgsnd(id_file1,&file1,sizeof(struct file1)-sizeof(long),0);
    			   printf("BBB\n");	
    		msgrcv(id_file2,&file2,sizeof(struct file2)-sizeof(long),getpid(),0);
    		// On écrit le fichier dans le repertoire spool/repon.rep
    		ecriture(argv[2],atoi(file2.rep));	
    		file1.pid_destinataire = file2.pid_reponse; // On envoi dans file1.type le numero du sous serveur qui a envoye le numero d'impression
    		file1.type_question = file2.pid_reponse;	
    		msgsnd(file1,&file1,sizeof(struct file1)-sizeof(long),0);
    et le bout de code du serveur qui m'intéresse, je vous indique l'endroit ou mon processus bloque pour recevoir son message :

    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
     
    while (1) {
        msgrcv(id_file1,&file1,sizeof(struct file1)-sizeof(long),1,0);
        if (!fork()) {
           if (file1.type_question == 1) { // On veut lancer un fichier dans la file d'impression
               int next_free; // Variable destiner a recevoir la prochaine place de libre
    	   next_free = find_next_number_print();
     
    	   etat_impressions[next_free].etat = EN_ATTENTE_COPIE;
    	   strcpy(etat_impressions[next_free].nom_fichier,file1.nom_fichier);
     
    	   // on met dans la structure file2 tous ce que l'on va renvoyer au client pour qu'il copie le fichier
    	   sprintf(file2.rep,"%d",next_free); 
               file2.pid_reponse = getpid();
               file2.type = file1.pid;   
     
    	   msgsnd(id_file2,&file2,sizeof(struct file2)-sizeof(long),0);   
     
               // On doit maintenant attendre que le client ai fini de copié.
              // MON PROGRAMME BLOQUE ICI !!!
    	   msgrcv(id_file1,&file1,sizeof(struct file1)-sizeof(long),getpid(),0);
     
    	   // ajouter les sémaphore pour pas dacces commun a inserer fin file ATENTION  PAS FAIT
    	   inserer_fin_file(next_free);
               imprim_file();	
    	   imprim_tab();
    	   printf("premier element a imprime : %d, dernier : %d, nb element %d",reperage->premier,reperage->dernier,reperage->nb_elements);
           } else if (file1.type_question == 2) {
           } else if (file1.type_question == 3) {
           } else {
              printf("erreur\n");
           }     
        exit(0);
        }
      }
     
    }
    Merci d'avance pour votre aide, j'espèer avoir été assez claire.

  2. #2
    Membre habitué
    Homme Profil pro
    BI Expert
    Inscrit en
    Décembre 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : BI Expert

    Informations forums :
    Inscription : Décembre 2005
    Messages : 181
    Points : 139
    Points
    139
    Par défaut
    précises ta question!!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Points : 42
    Points
    42
    Par défaut
    Je l'ai écrit dans le code, mon serveur reste en attente d'un message, qu'il ne reçoit pas apparement...

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/07/2014, 13h48
  2. Probleme semaphore+files de message
    Par ludo86 dans le forum C
    Réponses: 0
    Dernier message: 16/12/2007, 17h04
  3. Probleme file de message
    Par Treuze dans le forum C
    Réponses: 3
    Dernier message: 13/06/2006, 20h02
  4. [Debutant]Probleme ds file de message
    Par Treuze dans le forum C
    Réponses: 2
    Dernier message: 31/05/2006, 15h38
  5. [Debutant]Probleme file de message
    Par Treuze dans le forum C
    Réponses: 11
    Dernier message: 15/05/2006, 21h46

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