2010年(17)
分类: LINUX
2010-06-14 11:56:31
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参数从临时缓冲区拷贝到新的用户栈区,并设置用户态寄存器上下文,如用户栈指针、程序计数器等。