标签: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