【发布时间】:2015-12-08 15:01:02
【问题描述】:
我正在从管道读取 void* 到内存地址。内存地址是 char* 的地址,如下所示。
char *text=getStringFromFunction(params);
void *adrs=&text;
write(pipefd[1], adrs, sizeof(char *));
现在我正在尝试打印管道另一侧的文本,但我不确定如何仅使用内存地址来获取 char*。这都在同一个进程中,所以我相信我应该能够只用指向它的指针来访问地址空间。以下是我的尝试之一
void *buf;
read(pipefd[0], buf, sizeof(char *));
fprintf(stdout, "buf=%s", (char *) buf);
但它会产生垃圾结果。同样,我在搜索中找不到与此主题相关的任何内容,并提前感谢您的帮助!
【问题讨论】:
-
每个进程都有自己的虚拟地址空间,这会导致其他物理内存。一个进程中的指针值在另一个进程中完全没有意义。
-
尝试将数据写入管道而不是地址。
-
这将在一个进程中完成,不过感谢您的提示。数据会相当大,所以我避免通过管道传递它
-
代码第一部分中的
buf是什么?而adrs在第二部分?我认为你把它们弄错了。 -
在第一个 sn-p 中,您准备变量
adrs,然后将buf写入管道。在第二个 sn-p 中,您从管道中读取adrs,然后打印buf。我觉得这很令人困惑。
标签: c pointers memory type-conversion