c - 如何通过管道发送序列化的动态分配结构
问题描述
目前,这些值不会从原始结构复制到接收器结构。所以输出看起来只是垃圾。
有人可以帮助解释为什么这些值没有被正确复制吗?
结构定义:
typedef struct data {
int var1;
int var2;
} Data_t;
序列化和反序列化函数:
char* serialize_Data_t(Data_t* a_dataT) {
int size = 2*sizeof(int);
char* buffer = (char*)malloc(sizeof(char)*(size+1));
if (buffer == NULL) {
perror("Sorry out of memory\n");
buffer = NULL;
return buffer;
}
memcpy(buffer, &a_dataT->var1, sizeof(int));
memcpy(buffer + 2*sizeof(int), &a_dataT->var2, sizeof(int));
return buffer;
}
void deserialize_Data_t(char* a_buffer, Data_t* a_receiver) {
memcpy(&a_receiver->var1, a_buffer, sizeof(int));
memcpy(&a_receiver->var2, a_buffer+2*sizeof(int), sizeof(int));
}
在 main 我为两个结构分配内存并初始化它们的值
Data_t* original = GetData();
Data_t* receiver = GetData();
original->var1 = 5;
original->var2 = 1234;
receiver->var1 = -1;//just for testing
receiver->var2 = -1;//just for testing
我将原始结构发送到序列化函数并将其放入 char* 缓冲区
buffer = serialize_Data_t(original);
然后我在子进程中写那个缓冲区
if (pid == 0) {
close(pfds[0]);
write(pfds[1], buffer, sizeof(buffer));
printf("Writing in child process...\n");
sleep(2);
return 0;
}
并在父进程中反序列化并打印结果
if (pid > 0) {
wait(NULL);
close(pfds[1]);
read(pfds[0], r_buff, sizeof(buffer));
deserialize_Data_t(r_buff, receiver);
printf("Parent Process %d and %d\n", receiver->var1, receiver->var2);
close(pfds[0]);
}
解决方案
推荐阅读
- sql - 将 SQL Server 存储过程转换为查询
- html - 当标准阴影没有时,为什么盒子阴影会在过渡时闪烁?
- c++ - 串行连接打开所有端口?
- javascript - 如何使用 JS创建 Bulma 按钮元素而不是 HTML
- python - 无法使用 python 请求模块读取多个 set-cookie 数据
- javascript - 再次要求用户访问地理位置
- php - Symfony 4.3:用户弃用:Symfony\Bundle\TwigBundle\Loader\FilesystemLoader 类自 4.3 版以来已弃用,并将在 5.0 中删除……
- html - Gmail 应用程序 - 响应式签名(媒体查询)
- symfony - Symfony Api Platform 在从持久层检索实体后过滤实体
- express - CSP 和内联脚本被阻止