Я пытаюсь создать пул на основе времени: вы либо даете ответ на все вопросы, либо время истекло.Моя первоначальная логика заключалась в том, чтобы заставить ребенка считать, а родителя задавать вопросы, но я не смог это реализовать.Таким образом, я решил создать 2 детей и позволить родителям управлять их поведением.
Первый ребенок считает время, а второй задает вопросы.Кажется, это работает, за исключением конца программы, остальные вопросы также печатаются, что довольно странно.Я предполагаю, что scanf все еще ждет, пока я нажму какую-то клавишу, затем заполняет консоль мусором.
Теперь для некоторого кода:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int askQuestions(char* array[], int size){
char* answer;
for(int i =0 ; i < size ; i ++){
printf("%s\n",array[i]);
scanf("%s",&answer);
}
return 0;
}
int count(int bound){
int index = 0;
printf("Counting started....\n");
while(index < bound){
sleep(1);
index++;
printf("%d seconds left \n", bound-index);
}
printf("Time's up!\n");
return 0;
}
int main(){
char* questions[] = {"Q1","Q2","Q3"};
int size = sizeof(questions)/sizeof(questions[0]);
int countingTime = 3;
int status;
pid_t id1,id2;
id1 = fork();
if(id1 < 0){
printf("Fork failed");
}else{
if(id1 == 0){
status = count(countingTime);
exit(status);
}else{
id2 = fork();
if(id2 == 0){
status = askQuestions(questions,size);
exit(status);
}
}
wait(0);
}
return 0;
}
Вывод выглядит так:
Counting started....
Q1
2 seconds left
1 seconds left
0 seconds left
Time's up!
[modan@HP15-ManjaroCinnamon Test]$ Q2
Q3
PS процессы определенно останавливаются.(проверил это сверху) Заранее спасибо.