Printf () при использовании системных вызовов - PullRequest
1 голос
/ 25 сентября 2019

Проблема с домашней работой, над которой я работаю, довольно проста, но я новичок в C, так что я могу застрять в синтаксических ошибках.Я пытаюсь вызвать программу из другой программы, назначить новый процесс, используя fork(), а затем подождать, пока ребенок закончит, используя waitpid().Я пытаюсь А. заставить waitpid() работать, а Б. получить простое тестовое сообщение, которое будет показано после того, как ребенок закончил.

. / Countprimes проходит через ./countmaster../countprimes работает отлично, просто выводит на экран все простые числа от x до y../countmaster звонит ./countprimes.

#include <unistd.h>
#include <stdio.h>

int main(int argc, char* argv[]){

         int processid = fork();
         int status;
         char* arguments[4];
         arguments[0]="./countprimes";
         arguments[1]="10";
         arguments[2]="30";
         arguments[3]=NULL;

         if(processid == 0)
                  execvp("./countprimes",arguments);
         else
                  waitpid(processid, &status, 0);
                  printf("test1");
}

Я бы ожидал увидеть: число простых чисел, начинающееся с 10 и заканчивающееся 29 числом простых чисел, с 10 по 29 равно 6 test1

, что я вижу вместо этого - сообщение test1.Я также получаю предупреждение gcc: неявное объявление функции 'waitpid';Вы имели в виду «getpid»?

1 Ответ

1 голос
/ 25 сентября 2019

Я вижу несколько синтаксических ошибок и отсутствующий заголовок:

    #include <unistd.h>
    #include <stdio.h>
    #include <sys/wait.h>

    int main(int argc, char* argv[]){

             int processid = fork();
             int status;
             char* arguments[4];
             arguments[0]="./countprimes";
             arguments[1]="10";
             arguments[2]="30";
             arguments[3]=NULL;

             if(processid == 0) {
                      execvp("./countprimes",arguments);
            } else {
                      waitpid(processid, &status, 0);
                      printf("test1");
            } 
    }
...