将本地ipc缓冲区的地址存储在下面的结构成员中,并传入ipcwrite导致数据损坏
问题描述:
我声明了一个结构,其中一个结构成员是一个存储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*/
}
答
在Linux进程默认情况下不共享内存。为一个进程分配的内存不会分配给其他进程。
指针在进程之间根本不可共享。
您需要使用共享内存。而不是发送指针,而是给共享内存段命名,以便其他进程可以找到它。然后使用其他一些IPC机制来指示其他进程可以读取内存。
非常感谢很多目前我正在尝试相同。 –