我有这个结构:
typedef struct {
int pid;
char arg[100];
int nr;
} Str;
代码是这样的:
int main() {
int c2p[2];
pipe(c2p);
int f = fork();
if (f == 0) { // child
Str s;
s.pid = 1234;
strcpy(s.arg, "abcdef");
s.nr = 1;
close(c2p[0]);
write(c2p[1], &s, sizeof(Str*));
close(c2p[1]);
exit(0);
}
// parent
wait(0);
close(c2p[1]);
Str s;
read(c2p[0], &s, sizeof(Str*));
printf("pid: %d nr: %d arg: %s", s.pid, s.nr, s.arg);
close(c2p[0]);
return 0;
}
输出是这样的:
pid: 1234 nr: 0 arg: abc$%^&
pid始终是正确的,nr始终为0,arg中的第一个字符右边是一些随机字符。
我想在子进程中创建一个结构,然后通过管道将结构发送到父进程。
如何通过管道正确发送此结构?
答案 0 :(得分:3)
write(c2p[1], &s, sizeof(Str*));
不对。这只会写入指针大小的字节数。它应该是
write(c2p[1], &s, sizeof(Str)); // -- without the `*`.
同样,您需要使用:
read(c2p[0], &s, sizeof(Str)); // -- without the `*`.