char *
名前付きパイプを介して構造を渡そうとしていますが、受信側で、内部に配置されている「アドレス」データを取得できませんstructure
。を使用する場合WriteFile()
、ReadFile()
次の要件があります。
- structure に常駐する char ポインターを渡します。
- ネットワークを介してシステム間で通信したい
皆さん、ありがとうございました
システム間でポインターを移動することはできません。構造体フィールドには次のいずれかが必要です。
1) 固定サイズの char 配列:
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);
注: これは、これを実行するための、移植性が高く回復力のある優れた方法ではありません。それはただの方法です。