我在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:当我使用ls
或cat
等其他命令时,execlp
可以正常运行但gcc
没有。
答案 0 :(得分:3)
你错过了一个论点,应该是:
execlp("gcc", "gcc", "shoum.c", (char*)NULL);
第一个参数是要运行的程序,其余参数是程序的argv[]
数组。您缺少argv[0]
,其中包含正在运行的程序的名称。因此gcc
认为它使用名称shoum.c
并且没有文件名参数运行。