在下面的结构成员中存储本地ipc缓冲区的地址并传入ipcwrite会导致数据损坏

时间:2017-10-14 15:09:38

标签: c linux struct ipc

我正在声明一个结构,其中一个结构成员是一个存储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*/

}

1 个答案:

答案 0 :(得分:2)

在Linux进程上,默认情况下不共享内存。为一个进程分配的内存不会分配给其他进程。

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

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