2017-10-14 108 views
0

我声明了一个结构,其中一个结构成员是一个存储IPC缓冲区地址的指针。 ipc_buffer是本地的一种方法,当我将同一缓冲区的地址传递给另一个函数并通过IPCWrite()观察IPC_recevie方面的数据损坏时发送? 任何人都可以有指针为什么数据被损坏?将本地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进程默认情况下不共享内存。为一个进程分配的内存不会分配给其他进程。

指针在进程之间根本不可共享。

您需要使用共享内存。而不是发送指针,而是给共享内存段命名,以便其他进程可以找到它。然后使用其他一些IPC机制来指示其他进程可以读取内存。

+0

非常感谢很多目前我正在尝试相同。 –

相关问题