На курсе учитель дал нам некоторый код (на доске), но у него ужасное письмо, и я не могу сделать несколько частей. Также новый как на трубе, так и на вилке, так что это не помогает.Проблемы с трубой/вилкой. Не могу понять половину руководства (человек)
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
void main() {
int a[] = {1,2,3,4}, f[2]; // ok so we initialize an array and a "pipe folder" (pipefd in manual) ?
pipe (f); // not 100% sure what this does ?
if (fork() == 0) { // if child
close (f[0]); // close pipe read-end
a[0] += a[1];
write (f[1], &a[0], sizeof (int)) // fixed
close (f[1]); // close pipe write-end
exit(0); // closes child and sends status update to parent ?
}
else { // if parent
close (f[1]) // close write-end of pipe
a[2]+=a[3];
read (f[0], &a, sizeof(int)) // fixed
wait (0); // waits for child to ... close ? or just finish ? or is it the same thing
a[0]+= a[2]; close (f[0]);
printf ("%d\n, "a[0]);
}
}
Выполняется ли ребенок и родители в определенном порядке. Я предполагаю, что родитель ждет, когда ребенок закроется, если close (f[1])
не возвращает ошибку, это продолжается? (Кстати, что означает «0» в wait(0)
) и только потом продолжается?
Что я не понимаю? я получаю что-то правильно?
Я думал, что должен упомянуть, что я провел некоторое исследование, используя man
, но я нахожу его чрезвычайно запутанным. Насколько я знаю они предназначены для пользователей, которые уже знают, что они делают, но забыли некоторые детали (например, что включать и что делать -p) или люди, которые имеют более чем базовое понимание.
Это помогает, если вы не удаляете вопросы, а затем отправляете слегка измененную версию. –
'pipefd' означает дескриптор файла pipe – lvella
Я предполагаю, что этот пример показывает, как можно вычислить сумму на 2 параллельных процесса: одна сумма составляет половину чисел, а другая суммирует вторую половину и получает ответ от другого процесса. Поэтому число '8', вероятно, означает« 2 целых числа, по 4 байта каждый » – anatolyg