2017-10-14 7 views
0

Je déclare une structure et un membre de la structure est un pointeur qui stocke l'adresse du tampon IPC. Le ipc_buffer est le local à une méthode et quand je passe l'adresse du même tampon à une autre fonction et l'envoi sur IPCWrite() observant la corruption de données dans le côté IPC_recevie? Quelqu'un pourrait-il avoir un pointeur ici pourquoi les données ont été corrompues?Stocker l'adresse d'un tampon ipc local dans le membre de structure ci-dessous et passer dans ipcwrite provoquer la corruption des données

typedef struct ev_entry_s 
{ 
    event_t ev_id; 
    uint8_t *ipc_local_async_buff; 
    uint32_t ev_data_size; 
    uint8_t ev_data[0]; 
}ev_entry_t; 

fun_1() 
{ 
    uint8_t  ipc_buffer[IPC_MAX_SEND_LEN]; 
    fun_2(&ipc_buffer); /*sending as a parameter */ 
} 
fun_2(uin8_t *catch_pointer) 
{ 
    ev_entry_t event_p; 
    //Storing ipc_buffer addres in ipc_local_async_buff 
    event_p.ipc_local_async_buff = catch_pointer; 
    fun_3(&event_p); 
} 
fun_3(ev_entry *event_p) 
{ 
    /*sending the address of ipc_buffer over IPCWrite*/ 

} 

Répondre

2

Sous Linux, les processus ne partagent pas la mémoire par défaut. La mémoire allouée pour un processus n'est pas allouée pour d'autres processus.

Les pointeurs ne peuvent tout simplement pas être partagés entre les processus. Vous devez utiliser la mémoire partagée . Et ne pas envoyer de pointeurs, mais plutôt donner un nom au segment de la mémoire partagée afin que l'autre processus puisse le trouver. Ensuite, utilisez un autre mécanisme IPC pour signaler à l'autre processus que la mémoire peut être lue.

+0

Merci beaucoup, je suis en train d'essayer la même chose. –