摘要:描述文件夹属性结构体struct dirent(可参考在线文档)的最后一个成员d_name,用以存储文件名称, 一些类Unix系统也会采用下面的定义:struct dirent{ ino_t d_ino; off_t d_off; unsigned short d_reclen; char d_name[1];};显然对于一个用来存储字符串的数组,一个字节的空间只够存一个结束符'\0'的,这样做的目的是在利用struct dirent申请内存空间的时候,d_name可以按需申请,而不需要一...
阅读全文
随笔分类 - 读书笔记
卷帙浩繁,书中有路。
摘要:
使用utmp、wtmp、utmpx都需要#include ,它们的文件是二进制的,内容实际上是一个utmp结构体序列,该结构体声明在utmp.h文件中,结构成员记录了详细的用户登陆信息,它们的区别在于:
wtmp记录了所有登陆和注销记录,格式与用空用户名标记注销的utmp很相似,登陆也好注销也好都是往里面添加数据;
而utmp通过修改文件内容,登陆的时候添加记录,注销时删除记录,只记录当前使用系统的用户信息;
utmpx它与utmp结构体相似,区别在于POSIX.1没有指定utmp结构,而是定义为utmpx,它定义了ut_type、ut_pid、ut_line、ut_id、ut_user和ut_tv,并没有设定ut_line、ut_user字段的长度。
阅读全文
使用utmp、wtmp、utmpx都需要#include ,它们的文件是二进制的,内容实际上是一个utmp结构体序列,该结构体声明在utmp.h文件中,结构成员记录了详细的用户登陆信息,它们的区别在于:
wtmp记录了所有登陆和注销记录,格式与用空用户名标记注销的utmp很相似,登陆也好注销也好都是往里面添加数据;
而utmp通过修改文件内容,登陆的时候添加记录,注销时删除记录,只记录当前使用系统的用户信息;
utmpx它与utmp结构体相似,区别在于POSIX.1没有指定utmp结构,而是定义为utmpx,它定义了ut_type、ut_pid、ut_line、ut_id、ut_user和ut_tv,并没有设定ut_line、ut_user字段的长度。
阅读全文
摘要:重构的两种定义,一种名词形式,一种是动词形式:
重构(名词):对软件内部结构的一种调整,目的是在不改变软件之可察行为前提下,提高其可理解性,降低其修改成本。
重构(动词):使用一系列重构准则(手法),在不改变软件之可察行为前提下,调整其结构。
阅读全文
摘要:设计一个好程序库的要求之一就是彻底隔离接口和实现,C++的做法是通过构造、析构函数和成员函数:
* C++语言中将接口和实现分隔开的基本的方法之一就是采用构造函数和析构函数。构造函数本身提供了生成给定类对象的方法;析构函数则提供了与构造函数想法的行为。
* 成员函数能够防止用户访问那些他们不应该看到的类成员。
阅读全文
摘要:本章箴言:如果你发现自己需要为程序添加一个特性,而代码结构是你无法很方便地那么做,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性。重构之前,首先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验(self-checking)能力。重构技术以微小的步法修改程序。如果你犯下错误,很容易便可发现它。任何一个傻瓜都能写出计算机可以理解的代码。惟有写出人类容易理解的代码,才是优秀的程序员...
阅读全文
摘要:C++中的一个更为重要的思想是用户自定义类型可以很容易地当作内建类型使用。通过定义新类型,用户可以为了他们自己的目的来定制语言。这种强大的工具如果被错误的使用,便会十分危险。实际上,设计类库和设计编程语言是相似的,而且应该给予高度的重视。
阅读全文
摘要:如果代码是病人,程序员是医生,我们是扁鹊三兄弟中的谁呢?
Martin Fowler第一次参访项目,提出类结构行为的调整,项目经理由于面临进度压力,推迟了调整工作,他同样拒绝了作者对内部核心的整理工作,因为重构并不能引入任何新功能,只是让代码好看而已,但6个月后项目失败。
阅读全文
摘要:本章主要讲述了虚函数的不适用情况:
虚函数的代价并不是十分高昂,但也不是免费的午餐;在使用它们之前,要认真考虑其开销;
有些情况下非虚函数能够正确运行,而虚函数却不行;
不是所有类都是为了继承而设计的。
阅读全文
摘要:《C++沉思录》第9章由Picture类(负责文字信息的存储)、frame函数(创建新Picture并加框存储)、'|'运算符重载(创建新Picture,并将两幅文字作横向合并存储)、'&'运算符重载(创建新Picture,并将两幅文字做纵向合并存储),作者认为这种方案浅显直接,但是存在三个缺点。
阅读全文
摘要:本章讲的是一个简单的打印案例,完全可用几行代码来完成,而面对问题不断复杂化,我们发现修改过程式的代码不足以支撑需求的多变。
作者构造了Picture类,汇总需求细节,见招拆招,尤其在“接口设计”这一节里,把自己当成客户,跟自己一问一答(“我希望有些什么操作,如何表述这些操作?”),逐步分析不断复杂的需求,然后抽象出接口,其中不乏作者的经验之谈:要想决定具体操作的形式,有一个好办法,就是试着使用这些操作,从使用的例子推导出操作的定义形式要比从头苦思冥想地发明这些操作容易得多。
阅读全文

浙公网安备 33010602011771号