Colas de Mensajes

download Colas de Mensajes

of 3

description

Código en C para cola de mensajes

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.