Прежде всего, я уверен, что есть более быстрые и менее переполненные решения, но мне абсолютно необходимо заполнить массив только дочерними процессами.Заполните массив с помощью fork()
Скажем, у меня есть 3 Чайлдс:
int pos = 0;
for (i = 0; i<3 ; i++){
switch (fork()){
case -1: //fork error;
printf("[ERROR] - fork()\n");
exit(EXIT_FAILURE);
case 0: //child
fill(&req, pos);
pos++;
exit(EXIT_SUCCESS);
default:
break;
}
}
где заполняют в основном работает следующим образом:
void fill (request *req, int pos){
req->array[pos] = 1;
}
я понял, этот метод, конечно, не работает, так как каждый у ребенка есть копия pos = 0, и они просто увеличивают свою копию, поэтому массив всегда изменяется на 0. . Запрос структуры представляет собой структуру simpe с pid и массивом int отправляем через fifo.
typedef struct request {
int cpid; //client pid
int array[SIZE]; //array
} request;
Что я могу сделать, чтобы заполнить этот массив только дочерними процессами? Я должен повторить, я не могу использовать обходные пути, просто fork() и childs. Спасибо!
Вы знаете, что разветвленный процесс не разделяет память с родителем или с другими его братьями и сестрами? – Art
Да, как я писал после метода заполнения, я понял, что это невозможно, поскольку они копируют значение pos. –
Вам «абсолютно необходимо» использовать механизм, который не может делать то, что вам нужно (по крайней мере, не без большой настройки самой системы). Зачем? В чем смысл? Кто-то дал вам молоток и попросил вас использовать его только для полировки окна? Я вообще не понимаю вопроса. Ответ: «вы не можете этого сделать, как вы уже разобрались». – Art