【C语言】execlp和execl函数使用
函数说明:
execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。如果用常数0来表示一个空指针,则必须将它强制转换为一个字符指针,否则将它解释为整形参数,如果一个整形数的长度与char * 的长度不同,那么exec函数的实际参数就将出错。如果函数调用成功,进程自己的执行代码就会变成加载程序的代码,execlp()后边的代码也就不会执行了.
execlp代码示例:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> int main(int argc,char *argv[]) { pid_t pid = fork(); if(pid == -1) { perror("fork error"); exit(1); }else if (pid == 0) //如果是子进程则执行下边语句 {
//子进程单独执行此语句,执行系统命令ls -l -h,以NULL作为参数结尾,并且子进程不在执行后边代码 execlp("ls","ls","-l","-h",NULL); perror("exec error"); exit(1); } else if(pid > 0) { sleep(1); printf("i'm parent: %d\n",getpid()); } }
execl代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
int main(int argc,char *argv[])
{
pid_t pid = fork();
if(pid == -1)
{
perror("fork error");
exit(1);
}else if (pid == 0)
{
//与execlp类似,也是子进程单独执行此语句,第一个参数为文件地址,这样就可以实现子进程执行其他脚本的功能了
execl("./a.out","./a.out",NULL);
perror("exec error");
exit(1);
}
else if(pid > 0)
{
sleep(1);
printf("i'm parent: %d\n",getpid());
}
}

浙公网安备 33010602011771号