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[]);  
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等,关键是后两种限制,它们属于运行时的环境限制,需要使用以下三种函数进行检测:
  1. long sysconf(int name);  
  2. long pathconf(const char *pathname, int name);  
  3. long fpathname(int filedes, int name);  
long sysconf(int name);
long pathconf(const char *pathname, int name);
long fpathname(int filedes, int name);

它们是用来检测linux运行环境的限制的,成功返回响应值,出错则返回-1。
第一个函数是检测不与文件或目录相关联的运行时限制,例如OPEN_MAX,它返回用户可打开文件的最大数量。
而后两个函数则是分别用于检测与目录或文件相关联的运行时限制,例如LINK_MAX,它返回文件链接数的最大值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值