Unix环境高级编程学习笔记


exec系函数

Posix标准制定的exec系列的函数主要有六个,它们的声明新式如下:
  1. int execl(const char *path, const char *arg, ...);  
  2.        int execlp(const char *file, const char *arg, ...);  
  3.        int execle(const char *path, const char *arg,  
  4.                   ..., char * const envp[]);  
  5.        int execv(const char *path, char *const argv[]);  
  6.        int execvp(const char *file, char *const argv[]);  
  7.        int execvpe(const char *file, char *const argv[],  
  8.                   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等,关键是后两种限制,它们属于运行时的环境限制,需要使用以下三种函数进行检测:
  1. long sysconf(int name);  
  2. long pathconf(const char *pathname, int name);  
  3. long fpathname(int filedes, int name);  
它们是用来检测linux运行环境的限制的,成功返回响应值,出错则返回-1。 第一个函数是检测不与文件或目录相关联的运行时限制,例如OPEN_MAX,它返回用户可打开文件的最大数量。 而后两个函数则是分别用于检测与目录或文件相关联的运行时限制,例如LINK_MAX,它返回文件链接数的最大值。
  • 1
  • 2
  • 3
  • 4
  • 下一页
【内容导航】
第1页:初窥 第2页:文件IO
第3页:文件与目录 第4页:进程环境

相关内容