【发布时间】:2015-04-22 15:41:03
【问题描述】:
我有这个结构:
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 的前几个字符是正确的,然后是一些随机字符。
我想在子进程中创建一个结构体,然后通过管道将结构体发送给父进程。
我怎样才能通过管道正确发送这个结构?
【问题讨论】:
-
这个
sizeof(Str*)看起来很糟糕。 -
您的代码遗漏了相关的
#includes。