2. exec函数族-exec()函数族语法:
3. exec函数族中的6个函数的区别
这6个函数在函数名和使用语法的规则上都有细微的区别,下面根据可执行文件的查找方式、参数表传递方式及环境变量传递这三个方面进行比较。
注意:
参数实际上就是用户在执行这个可执行文件时所需的全部命令选项字符串(包括该可执行程序名本身)。
参数必须以NULL表示结束,如果使用常数0表示一个空指针,则必须要把它强制转化成一个字符指针((char *)0),否则exec将把它解释为一个整型参数。
例如:执行cat命令连接显示两文件内容
execl("/bin/cat","cat","/root/test1.c","/root/test2.c",NULL);
或者execlp("cat","cat","/root/test1.c","/root/test2.c",NULL);
char *argv[]={"cat","/root/test1.c","/root/test2.c",NULL};
execv("/bin/cat",argv);
或者:execvp("cat",argv);
exec函数族可以使用系统默认的环境变量,也可以传入指定的环境变量(进程想要为将运行的程序指定一个确定的环境时)。
通过以“e”(environment)结尾的两个函数execle()和execve()就可以在envp[]中指定当前进程所使用的环境变量。
4. exec使用实例:
/* execlp.c */
#include<stdio.h> #include<unistd.h> #include<stdlib.h> int main() { int ret=0; if(fork()==0) { if((ret=execlp("ps","ps","-ef",NULL))<0) { printf("Execlp error! \n"); } } return 0; }运行截图: