Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Usare msgsnd con struttura dinamica

    Ciao,
    sono alle prese con il c e con lo scambio di messaggi.

    Due processi comunicano con le primitive msgsnd e msgrcv per scambiare dei dati. In queste primitive bisogna definire una struttura che conterrà effettivamente i dati da scambiare. Finchè si definiscono tipi di dati primitivi tutto va bene, ma quando voglio passare strutture dati dinamiche (es un vettore lungo n) non so come implementare la struttura.

    La firma della funzione è: int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

    La struttura per tipi di dati primitivi è:

    struct mymsg {
    long mtype; /* message type */
    int vettore
    }
    mtype è il tipo di messaggio e va messo

    Se vettore fosse dinamico e la sua lunghezza fosse nota solo a run-time, come faccio a riscrivere la struttura??

    Grazie per le (eventuali) risposte

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Devi inserire nella struttura solamente i puntatori alle eventuali altre strutture e dati che cambiano dinamicamente.

  3. #3
    Grazie per la risposta.

    Se non ho capito male la struttura diventa

    struct mymsg {
    long mtype; /* message type */
    int * vettore
    }


  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Corretto ... ovviamente per un array di interi ...

  5. #5
    Ciao,
    scusate se vi rompo le scatole... ma ho un altro problema

    Ho sempre due processi che comunicano con le primitive msgsnd e msgrcv per scambiare dei dati.
    Il dato che scambio consiste in una struttura fatta così:

    struct mymsg {
    long mtype; /* message type */
    int * vettore
    }

    Il problema che riscontro è che quando il processo padre effettua delle recive (msgrcv) per collezionare tutti i dati spediti dai figli, quello che leggo in vettore è una serie di zeri e non i dati che i figli scrivevano.

    Nei processi figli prima di spedire, faccio una stampa a video dei dati prodotti e poi ne faccio una dalla parte del padre sui dati che leggo dalla coda dei messaggi.

    Vi posto l'output:

    // stampa dei figli
    figlio numero 0 - con vettore=134520864
    valore del vettore 0 4

    figlio numero 1 - con vettore=134520864
    valore del vettore 0 4


    // stampa del padre
    Sono il padre. Gestisco il figlio 0
    Il vettore nel padre è:134520864 e i dati sono
    0 0

    Sono il padre. Gestisco il figlio 1
    Il vettore nel padre è:134520864 e i dati sono
    0 0

    Perchè al padre non ritornano i dati generati dai figli??

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.