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

标签 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*/

}

最佳答案

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

指针根本无法在进程之间共享。

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

关于c - 在下面的结构成员中存储本地 ipc 缓冲区的地址并传递到 ipcwrite 导致数据损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46746003/

相关文章:

c - 结构/线程内的指针

linux - 编写 shell 脚本以将一个文件的内容查找到另一个文件中并显示所有出现的情况

c - 十六进制 float ,四舍五入

linux - 短读或 OOM 加载数据库。不可恢复的错误,现在中止

android - 获取适用于 android 的 valgrind。 `valgrind` 寻找 `memcheck-arm-linux` 的问题

c# - 为只读结构实现相等的最佳实践是什么?

c++ - 如何在 gsl 集成中将 struct 分配给 void

c - 警告 : ‘struct tag’ declared inside parameter list will not be visible outside of this definition or declaration void func(struct tag v);

c - 在 Mac OS X 10.6 上编译 SDL 2.0 时出现 libiconv 问题

c - Bison:纯推送解析器中存储的最后一个 $$ 值在哪里?