1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Codigo - uso do fork - pai manda msg para filho 1 e filho 2

Discussão em 'Programação' iniciada por sdvferreira, 1 de Junho de 2007. (Respostas: 0; Visualizações: 1403)

  1. sdvferreira

    sdvferreira Power Member

    viva aqui vai um código para filas de mensagem ....

    para ajudar quem tiver a dar esta matéria

    espero que gostem ...

    Código:
    
    
    /*
    um pai manda uma msg para um filho e para o filho 2
    
    */
    
    
    #include <stdio.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <sys/msg.h>
    #include <errno.h>
    #include <sys/ipc.h>
    
    
    
    struct mymsg
    {
    long mtype;
    char msg[20];
    };
    
    
    
    int main(){
    
        key_t msgid;
        int pid;
        
        msgid = msgget(IPC_PRIVATE, IPC_CREAT | 0660);
        
        if(msgid < 0){
                printf("Erro ao criar a fila de mensagens");
                return 0;
        }
            
        pid = fork();
        
        
        if(pid < 0){
            
            printf("Erro ao criar o processo");
            msgctl(msgid, IPC_RMID, NULL);
            return -1;
        }    
        if(pid == 0){
            struct mymsg tipo;
                
            ssize_t size = msgrcv(msgid, &tipo, sizeof(tipo), 1, 0);
            printf("%s", tipo.msg);
        }else{
            pid = fork();
                
            if(pid == 0){
                struct mymsg tipo;
                
                ssize_t size = msgrcv(msgid, &tipo, sizeof(tipo), 2, 0);
                printf("%s", tipo.msg);                
                
            }else{
                struct mymsg msg;
                
                msg.mtype = 1;
                strcpy(msg.msg, "filho 1 !\0");
                msgsnd(msgid, &msg, sizeof(msg)-sizeof(long), 0);
                
                msg.mtype = 2;
                strcpy(msg.msg, "filho 2!\0");
                msgsnd(msgid, &msg, sizeof(msg)-sizeof(long), 0);    
                
                msgctl(msgid, IPC_RMID, NULL);
            }
        }
        return 1;
    }
    
    
     
    Última edição: 1 de Junho de 2007

Partilhar esta Página