Unix环境高级编程学习笔记(一) 初窥

来源:互联网 发布:怎么取消淘宝延迟收款 编辑:程序博客网 时间:2024/04/30 06:19

exec系函数

Posix标准制定的exec系列的函数主要有六个,它们的声明新式如下:
int execl(const char *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 execvpe(const char *file, char *const argv[],                  char *const envp[]);

这些函数的作用是利用一个新的进程镜像(process image)来替代当前的进程镜像。
主要说明一下execlp函数,它的第一个参数file用于制定可执行的文件名,第二个参数arg以及后面的可变参都是传递给该可执行文件的参数,由于是可变参数,所以最后一个参数必须以(char*)NULL结尾。该函数如果成功执行,由于是替代当前的进程,所以函数调用语句之后的代码就不会再被执行了。
这里需要注意的是传递的参数,一般情况下,execlp函数的前两个参数一样,都是可执行文件名。我们考虑带参数的main函数的执行情况,argv[0]指代的实际上是可执行文件名,其后的argv[1]~~argv[n]才是真正传递给它的参数。所以为了保持一致性,由于arg参数以及其后的可变参才是传递给执行程序的参数,所以,arg参数最好传递可执行文件的名字,就是是和file参数保持一致。

进程时间

linux下获取的进程时间主要分为以下三类:时钟时间(clock time),用户CUP时间(user CPU time),系统CPU时间(system CPU time)
在说它们之间的区别,我们首先来回顾下进程的三种基本状态:运行,就绪,阻塞。所谓时钟时间其实就是进程从执行开始到结束真实经历的时间,所以:
时钟时间 = 阻塞时间 + 就绪时间 + 运行时间 
而我们知道进程的执行分为管态和目态,前者是内核调用函数执行的状态,后者则是用户代码执行时的状态,所以:
 用户CPU时间 = 运行状态下的用户空间时间 
 系统CPU时间 = 运行状态下系统空间的时间

linux运行环境限制

unix中有以下三种限制:
(1)编译时限制(头文件)
(2)不与文件或目录相关联的运行时限制(sysconf函数)
(3)与文件或目录相关联的运行时限制(pathconf函数和fpahtconf函数
第一种是属于编译时限制,这类限制一般都作为宏定义在头文件中,例如CHAR_MAX等,关键是后两种限制,它们属于运行时的环境限制,需要使用以下三种函数进行检测:
long sysconf(int name);long pathconf(const char *pathname, int name);long fpathname(int filedes, int name);

它们是用来检测linux运行环境的限制的,成功返回响应值,出错则返回-1。
第一个函数是检测不与文件或目录相关联的运行时限制,例如OPEN_MAX,它返回用户可打开文件的最大数量。
而后两个函数则是分别用于检测与目录或文件相关联的运行时限制,例如LINK_MAX,它返回文件链接数的最大值。

原创粉丝点击