如何解决如何通过管道发送序列化动态分配的结构
目前,这些值不会从原始结构复制到接收器结构。所以输出似乎只是垃圾。
有人可以帮助解释为什么这些值没有被正确复制吗?
结构定义:
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]);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。