摘要: 源自APUE 习题10.5代码参考自上一篇译文博客:Implementing Software Timer。代码由两部分组成:my_alarm.h my_alarm.cmy_alarm.h#include <stdio.h>#include <unistd.h>#include <time.h>#include <signal.h>#define TIME time_t#define MAXALARM 255#define MAXTIME 1000#define FALSE 0#define TRUE 1typedef struct { int 阅读全文
posted @ 2013-05-03 14:33 CoreyGao 阅读(202) 评论(0) 推荐(0) 编辑
摘要: UNIX信号是软件层次的异常控制流,为系统异步处理事件提供了机制。 UNIX信号使得内核和进程可以中断其他进程。 A signal is a small message that notifies a process that an event of some type has occured in the system. 每一个信号对应着系统中的某个事件。 本章主要讲述了常用信号,信号的处理方式,与信号有关的系统调用。然后用很大篇幅讲述了信号集与进程的信号屏蔽。主要知识点如下图:图1 信号的基本概念 图2 信号集与进程BTW:习题10.5很好,是APUE为数不多的与代码相关的好... 阅读全文
posted @ 2013-05-02 22:04 CoreyGao 阅读(284) 评论(2) 推荐(1) 编辑
摘要: Title:Implementing Software TimersBy:Don Libes翻译:CoreyGao 这篇文章提供了实现软件计时器所需的一系列函数。软件计时器是什么?你为什么需要实现软件计时器?软件计时器弥补了硬件计时器的先天不足。比如,对于大部分电脑的硬件计时器,你只能让时钟在未来某个指定时间触发一次中断(译者注:例如UNIX下的alarm函数)。 当运行多任务时,你就会想要让时钟能够同步地追踪多个计时器。即使多个计时器的时间相互重叠,时钟也必须能够正确的产生中断。操作系统始终都在重复上述过程。 Robet Ward在1990年四月的《C User's Journa.. 阅读全文
posted @ 2013-05-01 17:54 CoreyGao 阅读(1177) 评论(0) 推荐(0) 编辑
摘要: 这一章的内容在读第一遍的时候完全是在“看”,当时还以为“看”的挺明白。现在读第二遍,并准备写这篇读书笔记时,才发现,我第一遍读的时候,什么都没“看”明白。或许深入学习linux后还会发现,现在记录的这些笔记,也仅仅是记录个皮毛而已。第二次再看,发现理解这章内容的关键还是那句话“UNIX下一切皆文件“。这一章通过讲解“进程”与“终端”的故事,来讲解进程关系。对于unix而言,终端也是文件。只不过这种“文件"在人机交互中扮演了比较关键的角色。基于”终端是文件“的概念,才产生了”伪终端“,因此才能实现”网络登录“。基于”终端是文件“的概念,才能通过”进程组“和”会话“的概念,结合文件系统, 阅读全文
posted @ 2013-04-27 23:55 CoreyGao 阅读(899) 评论(0) 推荐(0) 编辑
摘要: 本章内容与前一章(进程环境)内容紧密相关,完全熟悉进程环境之后,才能理解进程控制相关内容。 本章内容充分体现了本书的名字“环境高级编程”。环境相关的内容介绍的比较充分,但是对于最基础的原理级内容(fork,exec)讨论不足。 应该是因为限于这本书的主题,而缺少了CSAPP第三章,第七章那种较为底层的讲解。 综合csapp和《UNIX网络编程卷2:进程间通信》才能对进程相关的原理概念较为了解。 具体内容见图1和图2:图1 进程控制概要图2 进程控制原语避免使用vfork。BTW:写本篇博客内容时,让我联想起了以前在酷壳上的一篇文章《一个fork的面试题》。又看了一遍之后,感觉那... 阅读全文
posted @ 2013-04-26 22:55 CoreyGao 阅读(786) 评论(2) 推荐(1) 编辑
摘要: 刚才在总结APUE第八章内容的时候,偶然联想起了以前在酷壳看到的一篇广为转载的blog--《一个fork的面试题》。其中关于这个问题的解释方式不是很符合 我的思维习惯 ,因此写了这篇文章并扩展一下《fork面试题》的问题。 现有如下C程序:/*fork.c*/#include <stdio.h>#include <unistd.h>int main(){ int i; for(i=0;i<2;i++){ fork(); printf("-"); } return 0;} 经过gcc fork.c编译,在当前目录下运行./a.out... 阅读全文
posted @ 2013-04-26 18:58 CoreyGao 阅读(1002) 评论(0) 推荐(0) 编辑
摘要: APUE的进程相关的部分(进程环境和进程控制两章) 都是建立在读者对于进程的概念比较了解的基础上的。略过了操作系统级的概念。 所以对于进程环境的粗略介绍显得比较杂乱而且深度不足。 补充概念:(摘自CSAPP)进程的经典定义是一个执行中的程序的实例。 系统中的每个程序都运行在某个进程的上下文中。上下文由程序正确运行所需的状态组成的。这个状态包括存放在存储器中的程序的代码和数据,它的栈、通用目的寄存器的内容、程序计数器、环境变量和打开文件描述符的集合。进程提供给应用程序两个关键抽象:1。一个独立的逻辑控制流,好像程序独占地使用处理器。2。一个似有的地址空间,好像程序独占地使用存储器系统。 ... 阅读全文
posted @ 2013-04-25 15:35 CoreyGao 阅读(690) 评论(0) 推荐(0) 编辑
摘要: 本章内容讲解了UNIX系统正常运行所必须的数据文件 以及 系统的标识函数和时间函数。 在系统数据文件和系统信息方面,与shell和perl比起来,C语言能做的很有限而且很复杂。 本章对于时间和日期相关的API介绍的很详细。关于“时间和日期”部分,补充rtc和system clock如下(主要摘自man 4 rtc -- release 3.23 of the Linux man-pages project) : RTC(real time clock)是指负责记录"wall clock"的硬件时钟。所有的i386PC的主板南桥上都有RTC,用一块可替换的硬币电池供电。 sy 阅读全文
posted @ 2013-04-24 12:11 CoreyGao 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 本章以stream(区别开STREAMS)为中心,讲解了UNIX的标准I/O库。 stream的核心是FILE结构。 打开一个stream时,fopen返回一个FILE对象指针。该FILE结构包括了: 实际用于I/O的文件描述符,指向该流缓冲区的指针,缓冲区的长度,当前缓冲区的字符,以及出错标志等等。 FILE结构定义在/usr/include/stdio.h中。 typedef struct _IO_FILE FILE; _IO_FILE结构定义在/usr/include/libio.h中。View Code 1 struct _IO_FILE { 2 ... 阅读全文
posted @ 2013-04-23 23:29 CoreyGao 阅读(773) 评论(0) 推荐(1) 编辑
摘要: 文件和目录 描述了文件系统的特征和文件的性质。 UNIX用户层的文件系统主要包括两部分:1.文件的stat属性。2.由文件的某些属性与进程的属性相结合衍生出的权限控制系统。 本章还初步介绍了UFS(UNIX FIle System)软件层的基本结构。 文件基本属性如图1: 图1 文件基本属性 文件的权限控制如图2: ... 阅读全文
posted @ 2013-04-21 23:40 CoreyGao 阅读(835) 评论(3) 推荐(1) 编辑