原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835

大家好,从这周开始学习apue《UNIX环境高级编程第三版》,在此,我要感谢网易的一个工程师朋友和室友,没有他们,我不会开始真正的学习这本书,希望大家以后开始慢慢进步。废话少说,直接上课后习题了。

UNIX高级编程第一章习题答案:

1.1在系统上验证,除根目录外,目录l和l l是不同的。

答:这个验证有很多方法可使用命令ls 、cd、vim等,目录.指向当前目录,目录..指向父目录,在根目录中这两个是相同的。首先是根目录

可见在根目录下,目录.和目录..都是指向本目录的。

结果显然易见。有兴趣可以使用vim .与vim..

1.2分析图1-6程序的输出,说明进程ID为852和853的进程发生了什么情况?

答:UNIX是多任务系统,在程序运行的同时其他两个进程也在运行,编程运行如下图所示

由上图可见进程PID是一直增大的,小水试图使用lsof  -p 15122去查询中间的那个进程,可是一无所获,因此可以判定这个进程在小水试图去抓它的时候已经结束了。为什么进程的PID一直在增大,会增大到什么程度?

1.3在1.7节中,perror的参数是用ISO C的属性const定义的,而strerror的整形参数没有用此属性定义,为什么?

答:因为perror的msg参数是个指针,perror就可以改变msg指向的字符串。然而使用限定符const限制了perror不能修改msg指针指向的字符串。而对于strerror,其错误号参数是整数类型,并且C是按值传递所有参数,因此即使strerror函数想修改参数的值也修改不了,也就没有必要使用const属性。

以我的理解是这样的:可以从两个函数的定义去理解

char  *strerror(int errnum);

void   perror(const char *msg);

strerror函数将errnum (通常就是errno值)映射为一个出错消息字符串,并返回此字符串的指针,而errno的值通常是不定的(可参考errno的规则),存在多种不同的errno,当然不能使用cons修饰符了。

而perror的作用基于error当前值,在标准错误上产生一条错误信息,首先msg它是指向error的,不能指向其他地方,不管当前error是何值,其内容是固定的,因此需要使用const。它首先输出msg所指向的字符串,然后是一个冒号,一个空格,接着是对应的errno值,最后换行符。

1.4若日历存放在带符号的32位整形数中,那么哪一年它将溢出?可用什么方法扩展溢出的浮点数,采用的策略是否与现有的应用相兼容?

答:首先确定起始时间为 T=1970年1月1日 00:00:00,然后是带符号的32位所存储的时间t=231/(60*60*24*365)=68.0962598年,所以溢出时间为T+t=1970+68=2038年。其溢出解决办法是将time_t数据类型定义为64位整形。

1.5若进程时间存放在带符号的32位整形中,而且每秒100滴答,经过多少天后该数溢出?

答:t=231/(60*60*24*100)=248.551348天。

最后送上格言:学习不能固步自封。。。(如有错误的地方请指正)

【转】apue《UNIX环境高级编程第三版》第一章答案详解的更多相关文章

  1. 《UNIX环境高级编程第三版》apue.h等源码文件的编译安装

    操作系统:Ubuntu 12/14 1.下载书中的源代码:点击下载 2.编译 tar -zxvf *.tar.gz cd ./apue.3e make 报错: can,t find -lbsd 解决办 ...

  2. unix环境高级编程基础知识之第一篇

    陆陆续续看完了圣经第一章,熟悉了unix的整个编程流程,c语言的用处在这里得到伸张. 从unix的体系结构,原来操作系统包括内核及一些其他软件,我们常常误称为linux内核为操作系统,这俨然成为一种共 ...

  3. 《UNIX环境高级编程 第2版》读书笔记

    CH1-2:基础知识.标准化 1 文件和目录 文件名:不能含/(分隔路径)和null(终止路径),255字符. 目录处理:opendir() readdir() closedir() 更改工作目录:c ...

  4. unix环境高级编程基础知识之第二篇(3)

    看了unix环境高级编程第三章,把代码也都自己敲了一遍,另主要讲解了一些IO函数,read/write/fseek/fcntl:这里主要是c函数,比较容易,看多了就熟悉了.对fcntl函数讲解比较到位 ...

  5. (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  6. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  7. (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  8. (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  9. (四) 一起学 Unix 环境高级编程(APUE) 之 系统数据文件和信息

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

随机推荐

  1. 【原创】kafka admin源代码分析

    admin包定义了命令行的一些实现 一.AdminOperationException.scala 一个异常类,表示执行admin命令时候抛出的异常 二.AdminUtils.scala admin一 ...

  2. js instanceof

    a instanceof b: 1,首先a不是对象,返回false,b的原型不是对象抛出TypeError 2,取得b的prototype标记为bp,对a的原型链做循环,令ap为当前原型,如果ap与b ...

  3. git笔记 常规使用

    1. 创建分支    git checkout -b fetch_name 2. 添加快照进行登记 git add . 3.登记到仓库 git commit -m 'message' git comm ...

  4. js继承理解(有引用)

    具体栗子:http://www.cnblogs.com/ayqy/p/4471638.html(地下为自己理解总结,可能晦涩,链接详细) 1.父类实例赋予子类原型. 2.利用子类函数引用 父类.cal ...

  5. Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现

    http://blog.csdn.net/wave_1102/article/details/39271693 分类: Android(105) 作者同类文章X Android4.3 规范了BLE的A ...

  6. GO語言視頻教程

    第1课:https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture1.md Go开发环境搭建h ...

  7. 【转】内部Handler类引起内存泄露

    如果您在Activity中定义了一个内部Handler类,如下代码: public class MainActivity extends Activity {       private  Handl ...

  8. ftp (文件传输协议)

    ftp (文件传输协议) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议” ...

  9. (转) Java读取文本文件中文乱码问题

    http://blog.csdn.net/greenqingqingws/article/details/7395213 最近遇到一个问题,Java读取文本文件(例如csv文件.txt文件等),遇到中 ...

  10. 从一个Activity返回上一个Activity

    从一个Activity返回上一个Activity 要求:保留上一个Activity的数据 方法: 第一步:从Activity1转向Activity2时,用startActivityForResult而 ...