Ich verwende eine IPC-Warteschlange, um Prozesssynchronisierung durchzuführen.Identifier Removed (EIDRM) Fehler beim Senden einer Nachricht mit einer IPC-Warteschlange
Ich bekomme immer den EIDRM-Fehler, wenn ich eine empfangene Nachricht von einer IPC-Warteschlange sende, aber ich kann sehen, dass die Warteschlange mit ipcs da ist.
Ich war für 2 Stunden suchen, aber ich kann den Fehler nicht sehen.
Der folgende Code ist eine abgespeckte Version, die mir den gleichen Fehler gibt.
#define CLAVE 53543961
#define TAM_BUFFER 1024
#define PERMISOS 0777
#define DEBUG
int Cola_Mensages;
int msgqid;
typedef struct {
long mtype;
char mtext[TAM_BUFFER];
}msgbuf;
int main (int argc, char *argv[]){
msgbuf msg_ipc;
int num_cli,i, i_aux;
if(argc == 2){
num_cli = atoi(argv[1]);
}else{
num_cli = 1;
}
//Creating the queue
if(msgqid = msgget(CLAVE,PERMISOS|IPC_CREAT)<0){
fprintf(stderr,"Problema al crear la cola de mensages IPC\n");
exit(0);
}
if(msgqid < 0){
fprintf(stderr,"Problema al crear la cola de mensages IPC\n");
exit(0);
}
for(i = 0;i<num_cli;i++){
//here i get the error
i_aux=msgrcv(msgqid,&msg_ipc,TAM_BUFFER,1,0);
if(i_aux == -1)
fprintf(stderr,"Error enviando msg ipc %s \n",strerror(errno));
}
msg_ipc.mtype = 2;
strcpy(msg_ipc.mtext,"COMIENZO");
printf("Enviando msg\n");
for(i = 0;i<num_cli;i++){
printf("Enviado msg %d\n",i);
//here i also get the same error
if (msgsnd(msgqid,(char *) &msg_ipc,strlen(msg_ipc.mtext),0)!=0)
{
fprintf(stderr,"Ocurrio el error %s en msgsnd\n",strerror(errno));
exit(4);
}
}
if (msgctl(msgqid,IPC_RMID,(struct msqid_ds *) NULL)<0)
{
fprintf(stderr,"Error al borrar la cola de mensajes de clave %d\n",CLAVE);
exit(4);
}
return 0;
}
ich schon von msgget tun Kontrolle und scheint richtig. Ich bin nicht sicher zu verstehen, was Sie meinen, dass "Kennung entfernen" mit "ipcs" konsistent ist, wenn ipcs sagt mir, dass die Warteschlange erstellt wird. – Nodens