Моя программа будет выбирать случайное число и использовать догадываться, что это такое. Я почти закончил с этим, за исключением того, что мне нужно дублировать файловые дескрипторы, чтобы указать на канал, и я не совсем уверен, как это сделать. Я думаю, что мне придется использовать dup2, но я не совсем уверен, как его реализовать. Все помогает. Вот мой код до сих пор:дубликат дескриптора файла, чтобы указать на трубку
#include <stdio.h>
#include <stdlib.h>
int main()
{
int pid;
int n;
char buf[101];
int pfdA[2];
int pfdB[2];
// CREATE FIRST PIPE
if (pipe(pfdA) == -1)
{
perror("pipe failed");
exit(-1);
}
// CREATE SECOND PIPE
if (pipe(pfdB) == -1)
{
perror("pipe failed");
exit(-1);
}
// FORK()
if ((pid == fork()) < 0)
{
perror("fork failed");
exit(-2);
}
if (pid == 0)
{
// duplicate file descriptor 0 to point to FIRST pipe
// CLOSE ends of FIRST pipe you don't need anymore
close(pfdA[0]);
close(pdfA[1]);
// duplicate file descriptor 1 to point to SECOND pipe
// CLOSE ends of SECOND pipe you don't need anymore
close(pfdB[0]);
close(pfdB[1]);
execlp("./A5_CHILD", "./A5_CHILD", (char *) 0);
perror("execlp");
exit(-3);
}
else
{
while (1)
{
char NUM[100];
close(pfdA[0]);
close(pfdB[1]);
int r = 0;
printf("Enter a Number: ");
fflush(stdout);
scanf("%s", NUM);
// SEND NUM to Child process
write(pdfA[1], NUM, strlen(NUM));
// READ FROM CHILD THE RESPONSE into the variable buf and
// store the return value from read() into the variable r
r = read(pfdB[0], buf, 100);
if (r > 0)
{
buf[r] = '\0';
printf("%s\n", buf);
fflush(stdout);
}
else
{
printf("[PARENT] Reading from child: read() returned %d\n", r);
break;
}
}
}
return (0);
}
Вы спрашиваете, как установить цепочку детей-процессов, каждый из которых извлекает данные из предшествующего (кроме первого), то жует на него и кормах данных до следующего, до последнего, который отправляет окончательные данные обратно родительскому устройству, и при этом, как настроить каналы io с помощью 'dup2()'? – WhozCraig
@WhozCraig это будет всего один ребенок и один родитель, но дочерний процесс - это тот, который запускает программу, которая фактически играет в игру. Поэтому он должен иметь возможность давать и получать номер через трубу. Но да, мне нужно знать, как настроить каналы с помощью dup2(), которые я верю, если нет лучшего способа сделать это. – R0drom