Colas de Mensajes
description
Transcript of Colas de Mensajes
-
Sistemas Operativos
1
COLA DE MENSAJES
EJEMPLOS
/* crea una cola de mensajes */
#include
#include
#include
#include
#include
int main(int argc , char *argv[])
{
key_t key;
int msgid;
scanf("%x",&key);
msgid = msgget(key,IPC_CREAT | 0644);
printf("cola de mensajes con clave %x identificador %d\n",key,msgid);
system("ipcs");
exit(0);
}
/* enva un mensaje a la cola de mensajes */
#include
#include
#include
#include
#include
#include
struct mensaje {
long tipo_msg;
char texto_msg[256];
};
int main(int argc , char *argv[])
{
struct mensaje mimensaje;
int msgid = atoi(argv[1]);
mimensaje.tipo_msg = getpid();
scanf("%s",mimensaje.texto_msg);
msgsnd(msgid,&mimensaje,strlen(mimensaje.texto_msg),0);
printf("tipo mensaje enviado = %d" ,mimensaje.tipo_msg);
printf("texto = %s\n",mimensaje.texto_msg);
printf("cola = %d\n",msgid);
system("ipcs");
-
Sistemas Operativos
2
exit(0);
}
/* recibe un mensaje de una cola de mensajes */
#include
#include
#include
#include
#include
#include
struct mensaje {
long tipo_msg;
char texto_msg[256];
};
int main(int argc , char *argv[])
{
struct mensaje mimensaje;
int tam_msg;
int msgid = atoi(argv[1]);
tam_msg = msgrcv(msgid,&mimensaje,256,0,0);
printf("tipo mensaje recibido = %d\n" ,mimensaje.tipo_msg);
mimensaje.texto_msg[tam_msg] = '\0';
printf("texto = %s\n",mimensaje.texto_msg);
printf("cola = %d\n",msgid);
system("ipcs");
exit(0);
}
/* elimina una cola de mensajes */
#include
#include
#include
#include
#include
#include
#include
int main(int argc , char *argv[])
{
int msgid = atoi(argv[1]);
if(msgctl(msgid,IPC_RMID,NULL) < 0)
{
perror("error msgctl\n");
printf("%d",errno);
}
-
Sistemas Operativos
3
else
printf("cola eliminada = %d\n",msgid);
system("ipcs");
exit(0);
}
/* tamao de la cola de mensajes */
#include
#include
#include
#include
#include
#include
struct mensaje {
long tipo_msg;
char texto_msg[256];
};
int main(int argc , char *argv[])
{
int canmsg = 0;
int cantby = 0;
int retsnd;
struct mensaje mimensaje;
int msgid = atoi(argv[1]);
mimensaje.tipo_msg = getpid();
strcpy(mimensaje.texto_msg,"hola mundo 2002");
canmsg++;
retsnd = msgsnd(msgid,&mimensaje,strlen(mimensaje.texto_msg),0);
while(retsnd!=-1)
{
canmsg++;
cantby+=sizeof(long)+strlen(mimensaje.texto_msg);
retsnd = msgsnd(msgid,&mimensaje,strlen(mimensaje.texto_msg),IPC_NOWAIT);
}
printf("canmsg %d \n",canmsg);
printf("cantby incluye tipo_msg y texto_msg %d \n",cantby);
system("ipcs");
exit(0);
}
Tambin puedo visualizar en pantalla los lmites de los recursos de ipc con el
comando $ ipcs l o con el comando $ cat /proc/sys/kernel/msgmnb se visualiza el
tamao mximo de una cola de mensajes.