как сделать так, чтобы изменения в дочернем процессе происходили в основной программе? - PullRequest
0 голосов
/ 09 ноября 2019

Я относительно новичок в C, и при создании одной из моих программ у меня есть структура, и в дочернем процессе я изменяю некоторые атрибуты этой структуры, но я хочу, чтобы она отражала реальную структуру. В сокращенной версии моего кода моя основная функция создает структуру, называемую таблицей, и устанавливает все ее атрибуты на основе того, какой пользовательский ввод затем в функции maketable, дочерний процесс изменит статус на 1, что в данном случае означает, что программа будет выполненаскоро и вызовите runprogram для запуска table.program

struct task{
    int id; // id of the task
    int pid_t pid;
    int status = 0;
    JOB* program; // arguments of a program to run EX:sleep 30
}
void print_task_info(){
   // prints all attributes of task to stdout
}
void getcommand(){
   //makes a task struct and initializes it from user input
   //then calls maketable
}
void maketable(struct task table){ // is called inside getcommand()
   pid_t p;
   if((p = fork()) == 0){
      table.status = 1;
      runprogram(table); // runs the task using execvp
  }else
   getcommand(); // getcommand() basically gets an id and calls maketable
}

Я бы хотел обновить table.status до 1, но результаты показывают, что table.status по-прежнему равен 0, а не 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...