我正在尝试通过命名管道传递结构,但在接收端,我无法获得char *
放置在内部的“地址”数据structure
。通过使用WriteFile()
,ReadFile()
以下是要求:
- 传递一个驻留在结构中的 char 指针。
- 并希望通过网络在系统之间进行通信
谢谢你们
您不能在系统之间移动指针。您的结构字段应具有:
1)固定大小的字符数组:
struct {
/* ... */
char data[256];
};
2)结构末尾的可变大小数据:
struct {
/* ... */
size_t size;
char data[0]; // data follows...
};
您必须在任一端对结构进行序列化/反序列化。如果您使用的是 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);
注意:这不是一个好的、可移植的和可靠的方法。这只是一种方法。