execl () используя целое число в аргументах (ping) - PullRequest
1 голос
/ 21 марта 2019

Я пытался создать двух дочерних процессов для одного родительского процесса с помощью fork (), а затем выполнил две «разные» команды для этих двух дочерних элементов. Я пытаюсь пропинговать два разных сайта с этими дочерними процессами. Дело в том, что когда выполняется первая команда ping, она не заканчивается, я пытался решить эту проблему, передавая -c сумму, чтобы ограничить количество выводов, но по какой-то причине он не выполняет свою работу. Вот код:

    pid = fork();
        if(pid!=0) {
          wait(&status);
          printf("----------------------------------------------------\n\n");
          printf ( " I am the parent my PID is %d, myPPID is %d, \n ",getpid(),getppid());
          printf("---------------------------------------------------\n\n");
       }else {
         printf ( " I am the child , my PID is %d , my PPID is %d \n",getpid(),getppid());
         printf("---------------------------------------------------\n\n");
         execl ( "/bin/ping","-c5", "sheffield.ac.uk",(char*)0);
         return 0;
       if(pid!=0){
         printf ( " I am the child , my PID is %d , my PPID is %d \n",getpid(),getppid());
         printf("---------------------------------------------------\n\n");

       }else {
         printf ( " I am the child , my PID is %d , my PPID is %d \n",getpid(),getppid());
         printf("---------------------------------------------------\n\n");
         sleep(2);
         execl ( "/bin/ping","-c5", "shu.ac.uk",(char*)0);
         return 0;
       }

  }
        break;

1 Ответ

2 голосов
/ 21 марта 2019

Из execl документации:

Первый аргумент, по соглашению, должен указывать на имя файла, связанное с исполняемым файлом.

поэтому вам нужно заменить

execl ( "/bin/ping","-c5", "sheffield.ac.uk",(char*)0);

, например,

execl ( "/bin/ping", "ping", "-c5", "sheffield.ac.uk",(char*)0);

Поскольку вы не задаете имя файла в качестве первого аргумента, оно заменяется на «-c5», и вы делаете ping без этой опции

Также обратите внимание на документацию:

Возвращаемое значение

Функции exec () возвращают, только если произошла ошибка.Возвращаемое значение -1, и errno устанавливается для указания ошибки.


Обратите внимание, что вы можете использовать popen для выполнения ping , а также для получения выходных сообщений, которые он выдает

...