快速业务通道

LINUX进程控制(1)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-25
一个参数应该是可执行文件的全路径名,注意一个参数为NULL.

  argv是传递参数的另外一种形式,它是一个字符串的数组,一般形式为:

  char *argv[]={“full path”,”param1”,”param2”,...NULL};

  envp也是一个字符串数组,它指定新进程的环境变量,一般形式为:

  char *envp[]={“name1=val1”,”name2=val2”,...NULL};

  对有参数envp的函数调用,新进程中的全局变量environ指针指向的环境变量数组将会被envp中的内容替代.

  示例:

  //GetArg.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{

  #include <stdlib.h>

  #include <unistd.h>

  #include <stdio.h>

  int main(int argc,char *argv[])

  {

  for(int i=0;i<argc;i )

  printf("arg%d:%s\n",i,argv[i]);

  char **ppEnv=environ;

  while(ppEnv && *ppEnv)

  printf("%s\n",*ppEnv );

  return 0;

  }

  //GetArg.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

  子进程程序GetArg.cpp,编译后的可执行文件存放到./exe/GetArg.exe

  exec测试程序

  //TestExec.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{

  #include <stdlib.h>

  #include <unistd.h>

  #include <stdio.h>

  int main()

  {

  char *arrArg[]={"GetArg.exe","abc",NULL}; 拥有帝国一切,皆有可能。欢迎访问phome.net

  char *arrEnv[]={"env1=111","env2=222",NULL};

  int iRet;

  //

  iRet=system("ls -l");

  //iRet=execl("ls","-l",NULL);//error!

  //iRet=execl("/bin/ls","ls","-l",NULL);

  //iRet=execl("/bin/ls","-l",NULL);//incorrect!

  //iRet=execl("./exe/GetArg.exe","GetArg.exe","abc",NULL);

  //iRet=execl("./exe/GetArg.exe GetArg.exe abc",NULL);//error!

  //iRet=execl("./exe/GetArg.exe","GetArg.exe abc",NULL);

  //iRet=execl("./exe","GetArg.exe","abc",NULL); //error!

  //iRet=execlp("./exe/GetArg.exe","GetArg.exe","abc",NULL);

  //iRet=execlp("./exe","GetArg.exe","abc",NULL);//error!

  //iRet=execlp("ls","ls","-l",NULL);

  //iRet=execle("./exe/GetArg.exe","abc",arrEnv);//????

  //iRet=execv("./exe/GetArg.exe",arrArg);

  //iRet=execve("./exe/GetArg.exe",arrArg,arrEnv);

  printf("iRet: %d\n",iRet);

  return 0;

  }

  // TestExec.cpp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

  2.4. popen函数

  popen函数类似于system函数,它是一种无需fork和exec就能执行外部程序的简易方法.与system的不同之处在于它使用管道工作.原型为:

  #include <stdio.h>

  FILE *popen(const char *command, const char *type);

  int pclose(FILE *stream);

  command为可执行文件的全路径和执行参数;

  type可选参数为”r”或”w”,如果为”w”,则popen返回的文件流做为新进程的标准输入流,即stdin,如果为”r”,则popen返回的文件流做为新进程的标准输出流.

  pclose等待新进程的结束,而不是杀新进程.

  示例:

  新进程源程序GetLine.cpp,可执行文件GetLine.exe

  //GetLine.cpp{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{

  #include <unistd.h>

  #include <stdio.h>

  #include <stdlib.h>

  int main(int argc,char *argv[])

  {

  char szBuf[32];

  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号