2013-04-21 21 views
3

我试图从子进程发送到父进程的二维数组,并失败可怕。不完全确定这应该如何做,但这是我的尝试。通过管道从子进程发送到父母的多维数组

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <stdlib.h> 

int fd[2]; 
int matrix[2][2]; 

int main() { 

    pipe (fd); 
    if (0 == fork()) { 
    printf ("Start child process with pid: %d\n", getpid()); 
    for (int i = 0; i < 2; i++) 
     matrix[i][i] = 1; 

    write (fd[1], matrix, 4); 
    exit (0); 
    } 

    printf ("Start parent process with pid: %d\n", getpid()); 
    read (fd[0], matrix, 4); 
    printf ("Received %d\n", matrix[1][1]); 

return 0; 
} 

编译正确,但接收到的值总是0而不是1 我在做什么错? (很多东西,我预计)

回答

3

这是因为你误解了readwrite 的第三个参数是元素数量。系统调用readwrite要求它们的third argument为字节数。

代码

write (fd[1], matrix, 4); 
... 
read (fd[0], matrix, 4); 

更改为

write (fd[1], matrix, 4*sizeof(int)); 
... 
read (fd[0], matrix, 4*sizeof(int)); 
+0

是的,这奏效了,我可以看到为什么。谢谢 ! – 2013-04-21 17:19:36

相关问题