在c ++中通过namedpipe传递结构的char *

时间:2012-07-24 07:16:47

标签: c++ pipe

我正在尝试通过命名管道传递结构,但在接收端,我无法获得char *放置在structure内的“地址”数据。使用WriteFile()ReadFile() 以下是要求:

  1. 传递一个驻留在结构中的字符指针。
  2. 并希望通过网络在系统之间进行通信
  3. 谢谢大家

2 个答案:

答案 0 :(得分:1)

您无法在系统之间移动指针。您的结构字段应该具有:

1)固定大小的字符数组:

struct {
  /* ... */
  char data[256]; 
};

2)结构末尾的可变大小的数据:

struct {
  /* ... */
  size_t size;
  char data[0]; // data follows...
};

答案 1 :(得分:0)

您必须在任一端序列化/反序列化结构。 C和C ++如果你正在使用它们 - 我不记得任何一种语言中的ReadFile / WriteFile)不支持自己的序列化结构,你必须编写代码来完成它。

因此

struct { int a; int b; char *c; } s;
fwrite(pipe, &s.a, sizeof(a));
fwrite(pipe, &s.b, sizeof(a));
int c = strlen(s.c);
fwrite(pipe, &c, sizeof(c));
fwrite(pipe, s.c, c);

注意:这不是一个好的,可移植的和有效的方法。这只是一种做法。