1

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

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

谢谢你们

4

2 回答 2

1

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

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

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

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

struct {
  /* ... */
  size_t size;
  char data[0]; // data follows...
};
于 2012-07-24T07:28:40.147 回答
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);

注意:这不是一个好的、可移植的和可靠的方法。这只是一种方法。

于 2012-07-24T07:31:21.150 回答