Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1093563
  • 博文数量: 155
  • 博客积分: 2525
  • 博客等级: 大尉
  • 技术积分: 2242
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-05 20:52
文章分类

全部博文(155)

文章存档

2013年(1)

2012年(149)

2011年(5)

分类: C/C++

2012-05-01 18:10:37

程序存储在磁盘上,当系统需要执行程序时,将其加载到内存中形成进程。加载程序是一个常用的操作。
 
1.执行一个新程序
linux环境下使用exec函数执行一个新程序。该函数在文件系统中搜索指定路径的文件,并将该文件内容复制到调用exec函数的地址空间,取代原进程的内容
因此,exec函数不是创建一个新进程,虽然进程的内容改变了,但是进程ID没变,仍然是同一个进程。
 
exec的函数原型如下:
int execl(const char *pathname,const char *arg0,..);
int execle
int execv
int execve
int execlp
int execvp
 
linux系统提供了6个exec函数的泛型,l代表list,说明执行程序的命令行参数以列表的形式提供,以NULL结尾。参数个数没有限制。
v表示vector,说明命令行参数要以二维数组的形式提供给新程序。这个数组的每一行是一个命令行参数。
e表示传递给新程序的环境变量列表,这个列表是一个二维数组,每一行是一个环境变量。
p代表第一个参数不是完整的路径名,而是一个程序名
 
2.执行解释器文件。
执行解释器文件的方法:
#!解释器程序的路径 给程序要传递的参数
 
3.在程序中执行shell命令
linux环境下使用system()调用shell命令
#include
int system(const char *cmdstring);
cmdstring是需要执行的shell命令,system函数是一个库函数,里面封装了fork,exec,waitpd三个系统调用。
(1)如果fork函数和waitpid函数执行失败,system函数返回-1
(2)如果exec函数执行失败,system函数返回如同shell调用exit(127)一样,表示指定文件不可执行
(3)如果三个函数都执行成功,system函数返回执行程序的终止状态,其值和echo $?的值是一样的。
(4)如果参数cmdstring所指向的命令字符为NULL,system函数返回1.这可以用来测试当前系统是否支持system函数。
阅读(1589) | 评论(0) | 转发(2) |
0

上一篇:进程创建

下一篇:管道(一)

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