Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7556191
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: LINUX

2011-06-13 20:52:05

#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:按照环境变量来查找

 

  1. /*
  2.  *    创建子进程
  3.  *    在子进程中执行ls命令
  4.  *    Lzy    2011-6-13
  5.  */

  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <sys/wait.h>

  10. int main(void)
  11. {
  12.     pid_t pid;
  13.     
  14.     pid = vfork();            /* 创建子进程 */
  15.     if(pid == 0)            //在子进程中
  16.     {
  17.         execlp("ls", "ls", "-l", NULL);        /* 调用exec函数 */
  18.     }
  19.     else if(pid > 0)
  20.     {
  21.         if(pid != wait(NULL))        //等待子进程结束
  22.         {
  23.             perror("wait");
  24.             exit(1);
  25.         }
  26.         
  27.         printf("\nDone!\n");
  28.     }    
  29.     
  30.     return 0;
  31. }

 

  1. /*
  2.  *    输出各个命令行参数和系统环境变量
  3.  *    将编译连接生成可执行文件exe供后面程序使用
  4.  */

  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <unistd.h>

  8. int main(int argc, char *argv[])
  9. {
  10.     int i;
  11.     for(i = 0; i < argc; i++)            
  12.         printf("arg%d %s\n",i,argv[i]);            //输出命令行参数
  13.     
  14.     char **penv = __environ;
  15.     while(penv && *penv)
  16.         printf("%s\n",*penv++);                //输出系统环境变量

  17.     return 0;
  18. }



  19. /*
  20.  *    在子进程中使用rxec函数调用自定义的可执行文件
  21.  *    Lzy    2011-6-13
  22.  */

  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <unistd.h>
  26. #include <sys/wait.h>

  27. int main(void)
  28. {
  29.     pid_t pid;
  30.     char *argv[] ={"exe","A","B","C D",NULL};
  31.     char *envp[] = {"env1 = 1", "env2 = 2", NULL};
  32.     
  33.     pid = vfork();                //创建子进程
  34.     if(pid == 0)                //在子进程中
  35.     {
  36.         execve("./exe", argv, envp);    //调用上面的可执行文件,输出命令行参数和新的环境变量
  37.     }
  38.     else if(pid > 0)
  39.     {
  40.         waitpid(pid, NULL, 0);            //等待子进程退出
  41.     }

  42.     return 0;
  43. }

 

阅读(1678) | 评论(0) | 转发(2) |
0

上一篇:fork函数

下一篇:进程其它操作

给主人留下些什么吧!~~