Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29739
  • 博文数量: 17
  • 博客积分: 655
  • 博客等级: 上士
  • 技术积分: 180
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-12 21:25
文章分类

全部博文(17)

文章存档

2010年(17)

我的朋友

分类: LINUX

2010-06-14 11:56:31



exec用于将一个可执行文件的二进制文件覆盖到新进程的用户级上下文存储空间上。

  int execl(const *path, const char *arg, ...);

  int execlp(const char *file, const char *arg, ...);

  int execle(const char *path, const char *arg, ..., char *const envp[]);

  int execv(const char *path, char *const argv[]);

  int execvp(const char *file, char *const argv[]);

  int execve(const char *path, char *const argv[], char *const envp[]);

(1)先获得指定可执行文件的索引结点。由于在索引结点中存放了相应文件的全部属性,因而可以从中得知该文件是否是可执行的。若可执行的,则将exec参数拷贝到一个临时缓冲区,以腾出参数占用的空间,然后将这些空间释放。

(2)回收内存空间。对原来与进程连接的各区,逐个断开其连接,并回收他们所占用的内存空间。

(3)分配内存空间。根据可执行文件头中的信息,为每个段分配新区,并将它们连结到进程上。若有足够的内存空间,可将这些新区装入内存。

(4)参数拷贝。将exec参数从临时缓冲区拷贝到新的用户栈区,并设置用户态寄存器上下文,如用户栈指针、程序计数器等。


阅读(559) | 评论(0) | 转发(0) |
0

上一篇:内存地址空间

下一篇:GPL

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