【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()); } }