标签:结构 环境 基础 设计 env 库函数 应用 应用程序 运行
目 录Exec的由来... 1
SylixOS下的exec函数族... 1
总结... 1
参考资料... 1
当时系统设计的初期,好多人都采用过“if-else if”的方式来实现一些内部命令,但是用这种“if-else if”的结构的前提是系统的创建者需要能够提前预知用户所要键入的命令,换句话说,其实是创建者限制了用户键入命令的种类。如果都按照这样的方式添加新命令,岂不是当系统每次支持一个新命令的时候都要重新编译一次shell。
同时更为严重的问题是,如果是外部命令,都是存储在文件系统上的外部程序,程序名的命名是自由的,如果仍然采用“if-else if”的结构,用户根本无法正常执行一个外部命令,于是为了解决这个问题,exec应运而生,exec会把一个可执行文件的绝对路径作为参数,把当前正在运行的用户进程的进程体用该可执行文件的进程体替换,从而完成新程序的执行,由于其实现原理是新进程替换老进程,所以新执行的进程的pid仍是老进程的pid。
SylixOS向用户提供的exec函数族中共有7种:
#include <process.h>
int execl(const char path, const char argv0, ...);
int execle(const char path, const char argv0, ...);
int execlp(const char file, const char argv0, ...);
int execv(const char path, char const *argv);
int execve(const char path, char const argv, char const *envp);
int execvp(const char file, char const *argv);
int execvpe(const char file, char const argv, char const *envp);
这七个函数实现的功能是类似的,都是将当前进程映像替换成新的程序文件。其差别在于程序对象的表示方式以及是否传入环境变量,其中参数path表示是可执行文件的绝对路径,参数file表示可执行程序的程序名,而具体的路径将从shell的全局变量$PATH中指定的路径中搜索。
其中只有execve和execvpe属于正真意义上的系统调用,其它都是在此基础上经过包装的库函数。
SylixOS为用户提供了一套POSIX兼容API, 其中包括了exec函数族,用户可以方便地编写 SylixOS 程序或移植程序到SylixOS。
《SylixOS应用程序开发手册》
《操作系统发展史》
标签:结构 环境 基础 设计 env 库函数 应用 应用程序 运行
原文地址:http://blog.51cto.com/12833900/2066258