unix高级环境编程.第一章习题答案
来源:互联网 发布:剑网三军娘捏脸数据 编辑:程序博客网 时间:2024/05/17 23:57
习题
1.1,在系统上查证,除根目录外,目录.和..是不同的。
- 普通目录对比
- 根目录对比
1.2, 分析程序1-4的输出,说明进程ID为852和853的进程发生了什么情况?
代码
/*1-4* print the process id*/#include "apue.h"int main(){ printf("this Process id:%d",getpid()); return 0;}
- 输出结果
分析:
Linux中,新创建一个进程时,内核会按顺序将下一个可用的进程分配给其使用。每当进程号到达32767的限制时,内核将重置进程号计数器,以便从小整数重新开始分配。
分配方式具体如下:
一旦进程号大到达32767,内核会将进程重置为300,而不是1,是因为低数值的进程号为系统进程和守护进程长期占用。
注: 在Linux 2.4版本及更早版本中,进程号的上限是32767,由内核常量PID_MAX所定义。在Linux 2.6版本中,情况有所改变。尽管进程号的默认上限仍是32767,但是可以通过Linux系统特有的/proc/sys/kernel/pid_max文件来进行调整(其值=最大进程+1)。在32位平台中,pid_max文件的最大值为32767,但是在64位平台中,该文件的最大值可以高达2^22次方(约400万),系统可容纳的进程数量会非常庞大。
1.3,在1.7节中,perror的参数是用ISO C的属性const定义的,而strerror的整型参数则没有用此属性。为什么?
- strerror函数:char * (int errnum);
功能:将errnum(它通常是errno值)映射为一个出错信息字符串,并且返回此字符串的指针
- perror函数:void perror(const char * msg);
功能:它首先输出msg指向的字符串,然后是一个冒号,一个空格,接着是对应errno值的出错信息。最后是一个换行符。
因为msg被定义为const所以在程序执行过程中,它将一直保持调用此函数时传入的值。如果试着修改msg的话,将导致程序无法遍历。即保证msg在输出过程中不被修改。
1.4,在附录B中包含了记录出错函数log_doit,当调用函数时,先保存了errno的值,为什么?
因为errno是全局变量,如果不先保存,可能在执行过程中,errno被修改后,那么log_doit记录的值就不是原来发生错误的值。
1.5,若日历时间存放在带符号的32整数中,那么到那一年它将溢出?用什么方法扩展浮点数?它们是否与与存在的应用兼容?
日历时间是从1970年1月1日 00:00:00开始每个一秒增加1。32位带符号整型最大值为2^31 -1 = 2147483647。然后计算得到最大日期为2038-01-19 11:14:07。即2038年。
扩展浮点数,采用IEEE754编码方式。
1.6 若进程时间存放在带符号的32位整型数中,而且每秒为100滴答,那么经过多少天时间将会溢出。
32位带符号整型最大值为2^31 -1 = 2147483647。一秒增加100。那么2147483647/100/60/60/24 = 248.55天,就会溢出。
- unix高级环境编程.第一章习题答案
- UNIX环境高级编程习题——第一章
- Unix环境高级编程 第三章习题答案
- apue《UNIX环境高级编程第三版》第一章答案详解
- UNIX环境高级编程习题 5.1
- Unix环境高级编程习题3.2
- UNIX 环境高级编程习题3.2
- Unix环境高级编程第一章摘记
- Unix环境高级编程 第一章 学习笔记
- Unix环境高级编程 第一章笔记
- UNIX环境高级编程--第一章总结
- UNIX环境高级编程第一章总结
- <<UNIX环境高级编程>>之第一章理解
- Unix环境高级编程——第一章-UNIX基础知识
- UNIX环境高级编程习题 4.11 myftw改造
- 《unix环境高级编程》APUE 习题5.4 的解答
- unix高级环境编程 第二十章 数据库函数库:习题讨论
- UNIX环境高级编程———第三章习题
- Educational Codeforces Round 19 E. Array Queries
- CodeForces 623 B.Array GCD(数论+dp)
- VS2008工程向Linux移植
- 训练营第六天作业
- bash位置参数变量
- unix高级环境编程.第一章习题答案
- BRDF详解
- java.sql.date和java.util.date的相互转换
- 常引用学习笔记
- 大型网站技术架构演变过程
- 强化学习基础 第二讲 基于模型的动态规划算法
- 一个小例子很好解释了JS的事件队列
- 四大组件及其生命周期
- Unreal Engin_画廊制作笔记 _002<利用简单的网格模型完成场景基本形态>