Je fais cela depuis une journée entière et je n'ai pas compris. Je dois vérifier si un message vide est passé au destinataire ou au serveur, puis dissocier la file d'attente. C'est ce que j'ai:Comment vérifier si un message est vide
while((c=getopt(argc, argv, ":q:"))!=-1){
switch(c){
case 'q':
q = 1;
Q = optarg;
break;
}
}
int oprimek_vrsta = -1;
char *msg = malloc(maxmsg_len + 1);
if(q != 0){
oprimek_vrsta = mq_open(Q, O_RDWR|O_CREAT|O_EXCL, 0660, &lastnosti_vrste);
if(oprimek_vrsta == -1){
perror("error creating queue");
return -1;
}
if(mq_getattr(oprimek_vrsta, &lastnosti_vrste) == -1){
perror("error reading attributes");
return -1;
}
while(loop){
memset(msg, 0, 4096);
munmap(msg, 4096);
msg_len = mq_receive(oprimek_vrsta, msg, maxmsg_len, &priority);
if(msg_len == -1){
perror("error reading message");
loop = 0;
free(msg);
mq_close(oprimek_vrsta);
mq_unlink(Q);
return -1;
}else{
write(1, msg, strlen(msg));
}
}
}
Ne vous 'msg_len == 0' si le message est vide? –
Voulez-vous vérifier si la file d'attente est vide ou si le message reçu est vide? – alk
je ne reçois pas 0, pour une raison quelconque, il est 1 mais si je mets 1, il se cassera même quand j'envoie quelque chose. @alk Je pense que les deux fonctionneraient – hypr2