Bonjour ,

perror me dit que msgrcv est mauvais : Invalid argument

Je ne comprends pas vraiment , j ai verifie les types des arguments ca m a l air bon ...

est ce que ca viendrait du fait qu il n y a aucun message ds la file de messages ? Si c est le cas comment peut on verifier que la file de message soit vide ou pas ?
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
 
 
struct message{
  long type;
  char mtexte[1];
  int pid;
};
 
void clientarrive()
{
  struct message client;
  int taille_message = sizeof(client) - sizeof(long);
  int pidclient;
 
  close(pipe_client_accueil[ECRITURE]);
  read(pipe_client_accueil[LECTURE],&pidclient,sizeof(int));
  close(pipe_client_accueil[LECTURE]);
 
  if (( msgrcv(msgid,&client,taille_message,0,0) ) == -1)
            perror("erreur :\n");
 
 
  printf("ne passe pas ici");
 
  if (client.pid == 0){ // je voulais dire si aucun message
       close(pipe_accueil_mecano[LECTURE]);
       write(pipe_accueil_mecano[ECRITURE],&pidclient,sizeof(int));
       close(pipe_accueil_mecano[ECRITURE]); 
       printf("%d",pidclient);
       }
 
      else {
               client.pid = pidclient;
               msgsnd(msgid,&client,taille_message,0);
             }
 
 
  return ;
}