Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将本地ipc缓冲区的地址存储在下层结构成员中并传递到IPCRITE会导致数据损坏_C_Linux_Struct_Ipc - Fatal编程技术网

将本地ipc缓冲区的地址存储在下层结构成员中并传递到IPCRITE会导致数据损坏

将本地ipc缓冲区的地址存储在下层结构成员中并传递到IPCRITE会导致数据损坏,c,linux,struct,ipc,C,Linux,Struct,Ipc,我声明了一个结构,其中一个结构成员是一个指针,用于存储IPC缓冲区的地址。 ipc_缓冲区是一个方法的本地缓冲区,当我将同一缓冲区的地址传递给另一个函数并通过IPCRITE()发送时,是否观察到ipc_recevie端的数据损坏? 有人能告诉我为什么数据被破坏了吗 typedef struct ev_entry_s { event_t ev_id; uint8_t *ipc_local_async_buff; uint32_t ev_data_size; uint

我声明了一个结构,其中一个结构成员是一个指针,用于存储IPC缓冲区的地址。 ipc_缓冲区是一个方法的本地缓冲区,当我将同一缓冲区的地址传递给另一个函数并通过IPCRITE()发送时,是否观察到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*/

}

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

指针不能在进程之间共享


你需要使用共享内存。而不是发送指针,而是为共享内存段指定一个名称,以便其他进程可以找到它。然后使用其他IPC机制向另一个进程发出可以读取内存的信号。

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

指针不能在进程之间共享


你需要使用共享内存。而不是发送指针,而是为共享内存段指定一个名称,以便其他进程可以找到它。然后使用其他IPC机制向其他进程发出信号,表示可以读取内存。

非常感谢当前我正在尝试相同的操作。非常感谢当前我正在尝试相同的操作。