Unix 环境高级编程学习笔记(一)
2013-08-24 15:37
323 查看
目录(?)[+]
exec系函数
进程时间
linux运行环境限制
[cpp]
view plaincopyprint?
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
才是真正传递给它的参数。所以为了保持一致性,由于arg参数以及其后的可变参才是传递给执行程序的参数,所以,arg参数最好传递可执行文件的名字,就是是和file参数保持一致。
在说它们之间的区别,我们首先来回顾下进程的三种基本状态:运行,就绪,阻塞。所谓时钟时间其实就是进程从执行开始到结束真实经历的时间,所以:
时钟时间 = 阻塞时间 + 就绪时间 + 运行时间
而我们知道进程的执行分为管态和目态,前者是内核调用函数执行的状态,后者则是用户代码执行时的状态,所以:
用户CPU时间 = 运行状态下的用户空间时间
系统CPU时间 = 运行状态下系统空间的时间
(1)编译时限制(头文件)
(2)不与文件或目录相关联的运行时限制(sysconf函数)
(3)与文件或目录相关联的运行时限制(pathconf函数和fpahtconf函数
第一种是属于编译时限制,这类限制一般都作为宏定义在头文件中,例如CHAR_MAX等,关键是后两种限制,它们属于运行时的环境限制,需要使用以下三种函数进行检测:
[cpp]
view plaincopyprint?
long sysconf(int name);
long pathconf(const char *pathname, int name);
long fpathname(int filedes, int name);
它们是用来检测linux运行环境的限制的,成功返回响应值,出错则返回-1。
第一个函数是检测不与文件或目录相关联的运行时限制,例如OPEN_MAX,它返回用户可打开文件的最大数量。
而后两个函数则是分别用于检测与目录或文件相关联的运行时限制,例如LINK_MAX,它返回文件链接数的最大值。
exec系函数
进程时间
linux运行环境限制
exec系函数
Posix标准制定的exec系列的函数主要有六个,它们的声明新式如下:[cpp]
view plaincopyprint?
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[]);
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
才是真正传递给它的参数。所以为了保持一致性,由于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等,关键是后两种限制,它们属于运行时的环境限制,需要使用以下三种函数进行检测:
[cpp]
view plaincopyprint?
long sysconf(int name);
long pathconf(const char *pathname, int name);
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,它返回文件链接数的最大值。
相关文章推荐
- Unix环境高级编程(第二版)学习笔记
- Unix环境高级编程 第一章 学习笔记
- UNIX环境高级编程学习笔记:9_12 孤儿进程 孤儿进程组
- Unix环境高级编程学习笔记整理
- unix环境高级编程 学习笔记5 标准IO库
- <<UNIX环境高级编程>>学习笔记之环境搭建
- Unix环境高级编程学习笔记之进程环境(1)
- Unix环境高级编程学习笔记1—a.out的实现
- UNIX环境高级编程_学习笔记(一)
- UNIX环境高级编程学习笔记(七)系统数据文件和信息
- Unix环境高级编程 第二章 学习笔记
- UNIX环境高级编程学习笔记
- Unix环境高级编程 学习笔记_1_Unix 基础知识
- UNIX环境高级编程学习笔记(六)标准I/O库
- unix环境高级编程 学习笔记3
- unix环境高级编程 学习笔记4
- 文件io(二)--unix环境高级编程笔记
- Unix环境编程学习笔记-----编程实例---- the normal exit2
- Unix环境编程学习笔记-------通读APUE第一遍后的疑问???????
- UNIX环境编程学习笔记(2)——文件I/O之不带缓冲的 I/O