#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i;
int fd[2];
int values[argc - 1];
for(i = 1; i < argc; i++) {
pipe(fd);
switch(fork()) {
case 0: /* child */
/* Do stuff */
close(fd[0]);
int value = atoi(argv[i]);
write(fd[1], &value, sizeof(value));
exit(0);
case -1:
perror("fork");
exit(1);
default: /* parent */
close(fd[1]);
read(fd[0], &values[i - 1], sizeof(values[i - 1]));
/* do stuff, but don't wait() or terminate */
}
}
for (i = 0; i < (argc - 1); i++)
{
printf("%d\n", values[i]);
}
return 0;
}
im пытается создать столько процессов, сколько количества аргументов, предоставленных исполняемому файлу, и каждый из них обрабатывает аргумент родительскому объекту и сохраняет в массиве и в конце распечатывает элементы массива. поскольку процессы выполняются параллельно, когда я распечатываю элементы массива, порядок должен быть случайным по отношению к порядку, в который я ввел эти элементы, но это, похоже, не так, поскольку я выполнил исполняемый файл 1 миллион раз, может кто-то скажите мне, в чем проблема? Итак, кто-то любезно отметил, что чтение сериализует вещи, что я должен сделать, чтобы процессы были действительно параллельными?c параллельные процессы, связанные с трубой