命令export,echo $path, env,查看当前环境变量的值
int execl(const char *path, const char arg, …/ (char *) NULL */);
int execlp(const char *file, const char arg, … / (char *) NULL */);
int execle(const char *path, const char arg, … /, (char *) NULL, char * const envp[] */);
int execv(const char *path, char *const argv[]);//方框为中括号
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char const argv[], char const envp[]);
l:表示list,说明执行程序的命令行参数以列表的方式提供,并且以NULL结尾,但是参数个数没有限制**.
**eg: char *arg0, char arg1, char arg3, NULL
p:以p结尾的exec函数表示第一个参数不是完整的路径名,而是一个程序名.这样的话就需要从环境表中的PATH变量中取得每一项,与第一个参数组合成一个完整的路径.
PATH=/bin:/us/bin:.
exec()函数会继续匹配"/bin/filename","/usr/bin/filename"...,直到找到第一个 正确的路径
v:表示vector,说明命令行参数要以二维数组的形式提供给新程序.
e:表示传递给新程序的环境变量列表,这个列表是一个二维数组,每一行都是一个变量.如果没有显式地传递一个环境变量表,那么新程序将复制父进程的环境表.
注意:如果文件名带有"/"将会被认为是一个路径名.
代码示例:
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <sys/wait.h>
6
7 int main(void)
8 {
9 pid_t pid;
10 char *cmd_arr[] = {"ls","-l","-a", NULL};
11 pid = fork();
12 if(pid < 0)
13 {
14 perror("fork()");
15 }
16 else if(pid == 0)
17 {
18 printf("This is child process ...\n");
19 //if(execv("/bin/ls", cmd_arr) == -1)
20 //if(execl("/bin/ls", "ls", "-l", "-a", NULL) == -1)
21 if(execvp("ls", cmd_arr) == -1)
22 {
23 perror("execv()");
24 }
25 exit(0);
26 }
27 else
28 {
29 waitpid(pid, NULL, 0);
30 printf("This is parent process id : %u\n" , getpid());
31 exit(0);
32 }
33
34 }