Использование канала для передачи целочисленных значений между родителем и ребенком
Я немного запутался в том, как правильно использовать pipe () для передачи целочисленных значений между двумя процессами.
В своей программе я сначала создаю трубу, а затем разветвляю ее. Я предполагаю, что у меня естьДва" трубы тогда?
Из того, что я понимаю, это мое назначение. Мой родитель проходит через цикл проверки целочисленного значения "i" для определенной операции увеличивает переменную count и сохраняет значение в массив. После каждой проверки мой родитель должен передавать целочисленное значение "i" моему ребенку через трубу. Затем мой ребенок использует это целочисленное значение, проверяет значение и должен увеличить переменную count и сохранить результат в массиве [shared?]. В конце концов; ребенок должен вернуть егоокончательный отсчет для родителя, который затем распечатывает два подсчета, и "Общий" массив .-> Я '
я не уверен, что мне нужно иметь общий массив или сохранить результаты вообще. Мне может понадобиться только счет - домашняя работа была неоднозначной, и яЯ жду ответа от профессора. Также; я могу даже сделать общий массив между процессами? Это звучит как начало какой-то проблемы для меня .->
Вот мои вопросы: один; как использовать трубы для целых чисел? Я'видел их только для массивов символов и предыдущих ответовкажется, что это возможно или законно ..? Я'Я не уверен. Там не было никакого разрешения, которое я мог бы найти на нем .->
Как мне использовать однонаправленный канал для передачи целых чисел ребенку? И дать ребенку что-нибудь вернуть? Я'я не уверен, как яЯ могу ... различать две трубы. Я делаю "знать» [или думаю, я знаю], что я должен закрыть одну неиспользованную часть каждой трубы, чтобы избежать "Некая расплывчатая проблема ".
Извините за глупые вопросы; У меня нетЯ не изучал процессы (кроме вилки) или трубы (вообще) в этом классе - так что яЯ не совсем уверен, с чего начать!
Вот часть моего кода - этоэто не красиво, и это нея не работаюне ожидаю этого. Это'больше заполнителя оболочки. Как только я выясню, как использовать трубу - яd Возможно, смысл кода имеет смысл.}
int main(void)
{
int fd[2];
pid_t childpid;
pid_t parentpid;
int i;
int threecount = 0;
int fivecount = 0;;
int results [MAXSIZE];
parentpid = getpid(); //Get current process ID number
pipe(fd);
childpid = fork();
if(childpid == 0){
close(fd[0]); //Closing this for some other reason
}
int j = 0;
if(childpid > 0)
close(fd[1]); //Closing this for some reason
if( childpid == -1 )
{
perror("Failed to fork\n");
return 1;
}
if (childpid > 0)
{
for(i = 1; i < MAXSIZE;i++)
{
if(i % 5 == 0)
{
fivecount++;
i = results[j];
j++;
wait(NULL);
}
}
}
else if (childpid == 0)
{
if(i % 3 == 0) //This i here should probably be the i value above, piped to the child
{
threecount++;
i = results[j]; //This should be part of th pipe
j++; //Trying to keep count of that shared array, not really the right way to do it though.
}
}
printf("%d %d \n", fivecount,threecount);
return 0;