使用命令gcc和execlp

时间:2014-10-25 09:37:50

标签: c linux gcc fork

我在gcc使用execlp时出现问题 这是执行的结果

root@ubuntu:~/sys/TP# ./sys 
shoum.c: fatal error: no input files
compilation terminated.
done2

我的代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h> /* for fork */
#include <sys/types.h> /* for pid_t */
#include <sys/wait.h> /* for wait */

int main(int argc,char** argv)
{
/*Spawn a child to run the program.*/


    pid_t pid=fork();
    if (pid==0)
    { /* child process */

           execlp("gcc","shoum.c",NULL);
      // execlp("ls","-liha",NULL);
        printf("not working\n");
            exit(127); /* only if execv fails */
    }
    else
    { /* pid!=0; parent process */
           waitpid(pid,0,0); /* wait for child to exit */
printf("done2 \n");
    }
 return 0;
}

PS:当我使用lscat等其他命令时,execlp可以正常运行但gcc没有。

1 个答案:

答案 0 :(得分:3)

你错过了一个论点,应该是:

execlp("gcc", "gcc", "shoum.c", (char*)NULL);

第一个参数是要运行的程序,其余参数是程序的argv[]数组。您缺少argv[0],其中包含正在运行的程序的名称。因此gcc认为它使用名称shoum.c并且没有文件名参数运行。