我正在声明一个结构,其中一个结构成员是一个存储IPC缓冲区地址的指针。 ipc_buffer是一个方法的本地,当我将相同缓冲区的地址传递给另一个函数并通过IPCWrite()发送时,在IPC_recevie端观察数据损坏? 任何人都可以指点为什么数据被破坏了吗?
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*/
}
答案 0 :(得分:2)
在Linux进程上,默认情况下不共享内存。为一个进程分配的内存不会分配给其他进程。
指针在进程之间根本不可共享。
您需要使用共享内存。而不是发送指针,而是给共享内存段命名,以便其他进程可以找到它。然后使用其他一些IPC机制来通知可以读取内存的其他进程。