通过管道从子proc发送到父级的多维数组

时间:2013-04-21 16:32:59

标签: c pipe

我正在尝试将子进程中的二维数组发送到父进程并且非常失败。不完全确定应该如何做,但这是我尝试过的。

#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。 我究竟做错了什么 ? (很多事情,我期待)

1 个答案:

答案 0 :(得分: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));