标签:list 不同的 ons 构造 打开文件 第一个 集中 进程控制 上下文
代码如下:
1 #include <stdio.h>
2 #include <unistd.h>
3 int main(){
4 char *arglist[3];
5 arglist[0] = "ls";
6 arglist[1] = "-l";
7 arglist[2] = 0 ;
8 printf("* * * About to exec ls -l\n");
9 execvp( arglist[0] , arglist );
10 printf("* * * ls is done. bye\n");
11 }
可以看到这个代码中用了execvp函数。
表头文件:
#include<unistd.h>
定义函数:
int execvp(const char file ,char const argv []);
execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。
如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main()
5 {
6 char *arglist[3];
7 char*myenv[3];
8 myenv[0] = "PATH=:/bin:";
9 myenv[1] = NULL;
10
11 arglist[0] = "ls";
12 arglist[1] = "-l";
13 arglist[2] = 0 ;
14 printf("* * * About to exec ls -l\n");
15
16 execlp("ls", "ls", "-l", NULL);
17 printf("* * * ls is done. bye\n");
它与exec1的区别就在于exevp函数的第一个参数,exec1传的是ls,exec2直接用的arglist[0],不过由定义可得这两个等价,所以运行结果是相同的。
代码如下:
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main()
5 {
6 char *arglist[3];
7 char*myenv[3];
8 myenv[0] = "PATH=:/bin:";
9 myenv[1] = NULL;
10
11 arglist[0] = "ls";
12 arglist[1] = "-l";
13 arglist[2] = 0 ;
14 printf("* * * About to exec ls -l\n");
15
16 execlp("ls", "ls", "-l", NULL);
17 printf("* * * ls is done. bye\n");
18 }
代码如下:
1 #include <stdio.h>
2 #include<sys/types.h>
3 #include<unistd.h>
4 int main()
5 {
6 int ret_from_fork, mypid;
7 mypid = getpid();
8 printf("Before: my pid is %d\n", mypid);
9 ret_from_fork = fork();
10 sleep(1);
11 printf("After: my pid is %d, fork() said %d\n",
12 getpid(), ret_from_fork);
13
14 return 0;
15 }
代码解释:
这个代码先是打印进程pid,然后调用fork函数生成子进程,休眠一秒后再次打印进程id,这时父进程打印子进程pid,子进程返回0.
运行结果如下:

代码如下:
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main()
5 {
6 printf("before:my pid is %d\n", getpid() );
7 fork();
8 fork();
9 printf("aftre:my pid is %d\n", getpid() );
10
11 return 0;
12 }
标签:list 不同的 ons 构造 打开文件 第一个 集中 进程控制 上下文
原文地址:http://www.cnblogs.com/zym0728/p/6107548.html