2017-10-14 3 views
0

構造体を宣言していますが、構造体メンバの1つがIPCバッファのアドレスを格納するポインタです。 ipc_bufferはローカルから1つのメソッドで、同じバッファのアドレスを別の関数に渡して、IPC_recevie側でデータ破損を観察しながらIPCWrite()を送信していますか? データが壊れている理由は誰でもここにポインタを置くことができますか?構造体メンバにローカルipcバッファのアドレスを格納し、ipcwriteに渡すとデータが破損する

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*/ 

} 

答えて

2

Linuxプロセスでは、デフォルトでメモリを共有しません。 1つのプロセスに割り当てられたメモリは、他のプロセスに割り当てられません。

ポインタは単にプロセス間で共有できません。

共有メモリを使用する必要があります。また、ポインタを送信せず、共有メモリセグメントに名前を付けて、他のプロセスがそれを見つけることができるようにします。その後、メモリを読み取ることができる他のプロセスに信号を送るために、他のいくつかのIPCメカニズムを使用します。

+0

ありがとうございました。現在、私は同じことを試みています。 –

関連する問題