我有这样的结构:

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的前几个字符后面跟着一些随机字符。
我想在子进程中创建一个结构,然后通过管道将该结构发送到父进程。
如何通过管道正确发送此结构?

最佳答案

write(c2p[1], &s, sizeof(Str*));

是不对的。它只会写入指针大小的字节数。应该是
write(c2p[1], &s, sizeof(Str)); // -- without the `*`.

同样,您需要使用:
read(c2p[0], &s, sizeof(Str));  // -- without the `*`.

09-06 09:06