通过管道失败将结构写入子级

时间:2013-04-13 03:51:48

标签: c struct ipc pipe

我正在尝试分叉一个子并为它编写一个结构,但由于某种原因,写入失败了。这是我到目前为止所得到的:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
    pid_t pid;
    int pfd[2];
    int rv;
    if(pipe(pfd) == -1){
        printf("Pipe failed\n");
    }

    struct t{
        int count[26];
        char array[4];
    };
    struct t st;

    if((pid = fork()) < 0){
        printf("Fork error\n");
    }else if(pid == 0){
        close(pfd[1]);
        rv = read(pfd[0],st,sizeof(struct t));
        printf("Read string: %d\n",rv);
    }else{
        int i = 0;
        for(i = 0; i < 26; i++){
            st.count[i] = i;
        }
        for(i = 0; i < 3; i++){
            st.array[i] = 'A';
        }
        st.array[3] = '\0';

        close(pfd[0]);
        rv = write(pfd[1],st,sizeof(struct t));
        printf("wrote: %d",rv);
        close(pfd[1]);
    }
}

这整夜都在扼杀我。我怀疑它与我没有完全理解指向结构的指针。我打印了返回108个字节的sizeof(struct t)(如预期的那样),我认为st是指向结构开头的指针,这意味着write命令将从那里开始并写入前108个字节,但显然不是这样的。我错过了什么?

1 个答案:

答案 0 :(得分:1)

试试&stst是结构本身。 &指出它。

您可能需要启用(或注意)编译器警告。将-Wall-Wall -Wextra添加到编译命令。


您需要包含read函数的头文件。

#include <unistd.h>

现在您应该收到错误消息。