#include
int execl(const char * pathname, const char * arg 0, ... /* (char *) 0 */);
int execv(const char * pathname, char *const a rgv [] );
int execle(const char * pathname, const char * a rg 0, .../* (char *)0, char
*const e n v p [] */);
int execve(const char * pathname char *const a rgv [], char *const envp [] );
int execlp(const char * filename, const char * a rg 0, ... /* (char *) 0 */);
int execvp(const char * filename, char *const a rgv [] );
功能:实现代码替换
返回值:若出错则为- 1,若成功替换新代码。
1. E:指可以传递环境变量表
2. L:单独的参数传递,最后要有一个NULL
3. V:传一个指针数组名
4. P:按照环境变量来查找
- /*
- * 创建子进程
- * 在子进程中执行ls命令
- * Lzy 2011-6-13
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/wait.h>
- int main(void)
- {
- pid_t pid;
-
- pid = vfork(); /* 创建子进程 */
- if(pid == 0) //在子进程中
- {
- execlp("ls", "ls", "-l", NULL); /* 调用exec函数 */
- }
- else if(pid > 0)
- {
- if(pid != wait(NULL)) //等待子进程结束
- {
- perror("wait");
- exit(1);
- }
-
- printf("\nDone!\n");
- }
-
- return 0;
- }
- /*
- * 输出各个命令行参数和系统环境变量
- * 将编译连接生成可执行文件exe供后面程序使用
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- int main(int argc, char *argv[])
- {
- int i;
- for(i = 0; i < argc; i++)
- printf("arg%d %s\n",i,argv[i]); //输出命令行参数
-
- char **penv = __environ;
- while(penv && *penv)
- printf("%s\n",*penv++); //输出系统环境变量
- return 0;
- }
- /*
- * 在子进程中使用rxec函数调用自定义的可执行文件
- * Lzy 2011-6-13
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/wait.h>
- int main(void)
- {
- pid_t pid;
- char *argv[] ={"exe","A","B","C D",NULL};
- char *envp[] = {"env1 = 1", "env2 = 2", NULL};
-
- pid = vfork(); //创建子进程
- if(pid == 0) //在子进程中
- {
- execve("./exe", argv, envp); //调用上面的可执行文件,输出命令行参数和新的环境变量
- }
- else if(pid > 0)
- {
- waitpid(pid, NULL, 0); //等待子进程退出
- }
- return 0;
- }
阅读(1722) | 评论(0) | 转发(2) |