Отправка многомерного массива через канал из дочернего процесса в родительский

Я пытаюсь отправить двумерный массив из дочернего процесса в родительский процесс и терпеть неудачу. Не совсем точно, как это должно быть сделано, но вот что я пробовал.

#include  #include  #include  #include  #include  #include  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. Что я делаю неправильно? (много вещей, я ожидаю)

Это потому, что вы неправильно понимаете третий аргумент read и write как количество элементов. read и write системных вызовов требуется, чтобы их третий аргумент считался количеством байтов.

Измените свой код

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

в

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