execl()在参数中使用整数(ping)

时间:2019-03-21 14:32:45

标签: c fork execl

我一直在尝试使用fork()为一个父进程创建两个子进程,然后为这两个子进程运行两个“不同”命令。我正在尝试使用这些子进程对两个不同的网站执行ping操作。问题是,当执行第一个ping'命令'并没有结束时,我尝试通过传递-c amount以限制输出量来解决此问题,但是由于某些原因,它没有完成任务。这是代码:

    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 个答案:

答案 0 :(得分:2)

来自 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 并获取其产生的输出消息