Risultati da 1 a 2 di 2
  1. #1
    Shogun Assoluto L'avatar di The Great Guerra
    Data Registrazione
    03-12-03
    Località
    Ovunque
    Messaggi
    29,580

    Predefinito Code di messaggi C, probleminoino

    Ciao ragazzi, vi posto tutto il codice del mio programmino (in realtà devo realizzarne un più corposo, questo ve l'ho fatto di esempio).
    Il mio problema è molto semplice, quando mando con una msgsnd un messaggio (da cliente a servitore o il contrario) la msgrcv lo riceve correttamente ma, quando lo mando in stampa, scopro che l'int del messaggio (m.num o l.num) è sballato. Nel senso, se invio un messaggio con

    tipo = RICH
    mess = "Ciao!"
    num = 123;

    ricevo, a quanto pare

    tipo = RICH
    mess = "Ciao!"
    num = 98979846; (un numero casuale)

    secondo voi? ho pensato che sia un problema di puntatori, ma non capisco dove possa essere.

    Codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/msg.h>
    #include<sys/types.h>
    #include <sys/ipc.h>
    #include<sys/wait.h>
    #include "fileheader.h"
    
    typedef struct msg{
    long tipo;
    char mess[30];
    int num;
    } messaggio;
    
    main(){    
        printf("\n.....:SERVITORE:.....\n");
        int key = MYKEY;
        int ric,inv,cod,padre,w8,i;
        int grande = sizeof(int)+sizeof(char[20]);
    
        char comando[30];
        sprintf(comando,"./cliente&");
        system(comando);
    
        cod = msgget(key,IPC_CREAT | 0666);
    
        padre=fork();
            if(padre){
                w8=wait(0);
                printf("\n.....:SERVITOREND:.....\n");
                msgctl(cod,IPC_RMID, 0);
                }
            else{    messaggio l;
                ric = msgrcv(cod,&l,grande,RICH,0);
                if (ric!=-1) {    printf("\nSERVITORE Mess Ricevuto, rispondo. (%s|%d)\n",l.mess,l.num);
                        messaggio m = {RISP,"Sono servitore, ciao",444};                
                        inv = msgsnd(cod,&m,grande,0);
                        if (inv==-1)printf("\nSERVITORE Errore invio\n");
                        else printf("\nSERVITORE Messaggio inviato! (%s|%d)\n",m.mess,m.num);
                        }
                else printf("\nSERVITORE Mess Non Ricevuto\n");
                }
    
    }
    Codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sys/msg.h>
    #include<sys/types.h>
    #include <sys/ipc.h>
    #include<sys/wait.h>
    #include "fileheader.h"
    
    typedef struct msg{
    long tipo;
    char mess[20];
    int num;
    } messaggio;
    
    main(){
        printf("\n.....:CLIENTE:.....\n");
        int key = MYKEY;
        int ric,inv,cod,padre,w8,i;
        int grande = sizeof(int)+sizeof(char[20]);
    
        cod = msgget(key,IPC_CREAT | 0666);
        
        padre=fork();
        if (!padre){
            messaggio m = {RICH,"Sono cliente, ciao",999};
            inv = msgsnd(cod,&m,grande,0);
                if (inv==-1)printf("\nCLIENTE ERRORE non inviato\n");
                else printf("\nCLIENTE Messaggio inviato! (%s|%d)\n",m.mess,m.num);
            messaggio l;
            ric = msgrcv(cod,&l,grande,RISP,0);
            if (ric==-1) printf("\nCLIENTE Messaggio non ricevuto");    
            else  printf("\nCLIENTE Messaggio ricevuto (%s|%d)\n",l.mess,l.num);    
            }
        else{    w8=wait(0);
            printf("\n.....:CLIENTEND:.....\n");
            }
    
    }

  2. #2
    Shogun Assoluto L'avatar di The Great Guerra
    Data Registrazione
    03-12-03
    Località
    Ovunque
    Messaggi
    29,580

    Predefinito Riferimento: Code di messaggi C, probleminoino

    bon, risolto da solo. Assurdo, l'unico posto dove non ho guardato, xke convinto di aver copia-incollato tra i due file, è la struct. una ha char[20] l'altra char[30]
    Ultima modifica di The Great Guerra; 16-12-10 alle 03:13:12

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato