
APUE
奔跑の河马
滴水可石穿,跬步致千里
展开
-
APUE读书笔记(1) 第一章 UNIX基础知识
第一章 UNIX基础知识1.UNIX是一个操作系统,操作系统可以定义为一种软件,控制计算机硬件资源,提供程序运行环境。我们通常叫这种软件为内核。2.UNIX操作系统包括以下几个部分,由内到外为内核,系统调用,shell,公共函数库,应用程序。3.TODO...原创 2019-04-21 21:18:50 · 355 阅读 · 0 评论 -
APUE读书笔记(12) 进程控制(下)
一:竞争条件 当多个进程都企图对共享数据进行处理,而最后的结果又取决于进程运行的顺序时,我们认为发生了竞争条件。父进程等待子进程返回可以使用wait函数,子进程等待父进程返回可以使用轮询的方式,每隔1s都去询问一次。但是这样浪费CPU时间,所以多个进程之间需要有某种形式的信号发送和接受的方式来进行处理多个进程间通信的问题。在第十节将会说明这个问题。二:函数exec fork函数创建新的子...原创 2019-07-07 14:43:20 · 134 阅读 · 0 评论 -
APUE读书笔记(15) 信号(上)
第十章 信号一:主要内容: 信号属于软件中断,它提供了一种异步处理事件的方式。本章对信号机制进行综述,说明每一种信号的用法,然后分析早期实现的问题,之后说明解决问题的方法。二:信号概念 每个信号都有名字,他们都是以SIG开头,信号在signal.h文件中被定义为正整数常量,并且不存在编号为0的常量。 产生信号的方式多种多样,比如最常见的就是在终端中ctrl+c,就可以产生中断信号。...原创 2019-07-28 23:08:22 · 156 阅读 · 1 评论 -
APUE读书笔记(14) 进程关系(下)
一:会话 会话是一个或者多个进程组的集合,如下图中一个会话有三个进程组: 会话中的进程组通常是由shell中的管道(|)进行连接的,比如上图的安排可能是有如下命令形成的:p1 | p2 & p3 | p4 | p5,进程调用setsid函数可以建立一个新会话。 如果调用这个函数的进程不是一个进程组的组长,那么将会发生以下三件事情: 1.该进程变成新会话的会话首进程,并且该...原创 2019-07-21 22:24:34 · 117 阅读 · 0 评论 -
APUE读书笔记(16) 信号(中)
一:可重入函数 简单的来说,当一个进程捕捉到了信号,那么这个进程将会执行该信号处理程序中的指令,这个是绝对的。但是我们可能会想到一个问题,假设该进程正在执行一些比较特殊的指令,比如malloc;这时进程捕获到了一个信号,该信号处理程序执行也为malloc,那么会发生什么?这很有可能会对进程造成一个极为严重的影响,甚至直接杀死进程。 那么由上可知,类似于malloc这种函数是【不可重入函数】...原创 2019-08-04 23:00:10 · 190 阅读 · 0 评论 -
APUE读书笔记(17) 信号(下)
一:函数sigprocmask 一个进程的信号屏蔽字规定了当前阻塞而不能递送给该进程的信号集。调用函数 sigprocmask可以检测或更改 (或两者 ) 进程的信号屏蔽字。原型如下: 首先,如果oset是一个非空的指针,那么进程的当前信号屏蔽字通过oset返回。 其次,若set是一个非空指针,则参数how指示如何修改当前信号屏蔽字。SIG_BLOCK是或操作,而SIG_SETMAS...原创 2019-08-25 21:29:57 · 126 阅读 · 0 评论 -
APUE读书笔记(18)线程
第十一章 线程一:主要内容: 线程可以在单进程环境中执行多个任务,并且一个进程中的所有线程都可以访问该进程的组成部件,比如内存和文件描述符。多线程使得单个资源会被多个用户共享,所以同步机制在多线程中是至关重要的。二:线程概念 典型的UNIX进程可以看成只有一个控制线程:一个进程在同一时间只能做一件事情。一个进程对应多个线程有以下好处: 1.通过对每种事件分配一个单独的处理线程,可以...原创 2019-09-09 00:30:47 · 161 阅读 · 0 评论 -
APUE读书笔记(19) 线程控制(上)
第十二章 线程控制一:线程限制: Single Unix定义了一线线程操作的限制,和其他的限制一样,可以通过sysconf来查询。和其它的限制使用目的一样,为了应用程序的在不同操作 系统的可移植性。 一些限制: PTHREAD_DESTRUCTOR_ITERATIONS: 销毁一个线程数据最大的尝试次数,可以通过_SC_THREAD_DESTRUCTOR_ITERATIONS作为sysc...原创 2019-09-15 22:35:24 · 175 阅读 · 0 评论 -
APUE读书笔记(20) 线程控制(下)
一:线程特定数据: 线程特定数据也称为线程私有数据,是存储和查询某个特定线程相关数据的一种机制。线程模型是可以共享进程中的一些数据,但是为什么又需要有线程特定数据呢?这主要基于两点: 第一:有时候需要维护基于每线程的数据。虽然线程id是一个整数且唯一,但是基于线程id作为数组的索引会有不够安全(不太清楚这里的不安全指的是什么)。作者提到:我们希望可能有一些额外的保护,防止某个线程的数据与其...原创 2019-09-23 00:03:24 · 146 阅读 · 0 评论 -
APUE读书笔记(11) 进程控制(中)
一:函数exit 进程有五种正常终止的方式和三种异常终止的方式。五种正常的退出方式为: 1.main中调用return,等效于调用exist 2.调用exit函数 3.调用_exit和_Exit函数。 4.进程的最后一个线程启动例程中调用return语句。 5.进程的最后一个线程调用pthread_exit函数。 三种异常的退出方式为: 1.调用abort。 2...原创 2019-06-30 23:14:56 · 169 阅读 · 0 评论 -
APUE读书笔记(13) 进程关系(上)
第九章 进程关系一:主要内容: 进程之间具有关系,每个进程都会有一个父进程,当子进程退出时,父进程可以得到通知并能取得子进程的退出状态。二:终端登录 对于BSD终端登录,当系统自举时(不清楚什么时自举),内核会创建ID为1的进程,也就是init进程。init进程使系统进入多用户模式,init读取文件/etc/ttys,对每一个允许登录的终端设备,init调用一次fork,他所生成的子进...原创 2019-07-14 23:04:22 · 122 阅读 · 0 评论 -
APUE读书笔记(10) 进程控制(上)
第八章 进程控制一:主要内容: 本章介绍UNIX系统的进程控制,包括创建新的进程,执行程序,和进程终止。二:进程标识 进程是使用一个ID来进行标识的,应用程序有时候就把进程ID作为名字的一部分来创建一个唯一的文件名。进程ID是唯一的,但是ID却是可以复用的,为了保证新进程的ID不会和最近一个进程的ID重复,大部分的系统都会使用延迟复用算法。三:函数fork 一个进程,包括代码、数...原创 2019-06-23 22:00:07 · 132 阅读 · 0 评论 -
APUE读书笔记(2) 第二章 UNIX标准及实现
第二章 UNIX标准及实现一:主要内容:原创 2019-04-28 22:27:18 · 199 阅读 · 0 评论 -
APUE读书笔记(3) 第三章 文件IO
第三章 文件IO一:主要内容: 本章主要讲述UNIX系统中的文件系统,包括文件信息的记录方式;文件的函数;文件的共享等。二:文件描述符 对于内核来说,所有打开的文件都是用文件描述符来标识的,文件描述符是一个非负整数。每当一个文件打开或者创建时,内核都会想进程返回一个文件描述符来标识该文件,这个描述符可以用来进行其他操作,说白了就是内核区别多个打开文件的一个flag。 值得一提的是,...原创 2019-05-05 23:37:51 · 161 阅读 · 0 评论 -
APUE读书笔记(4) 文件和目录(上)
第四章 文件和目录(上)一:主要内容: 本章主要讲述UNIX系统中文件和目录,与上一章有所区别的是,文件IO主要讨论突通文件进行的;文件和目录主要讲述描述文件系统的其他特征和文件的性质。 由于该章篇幅较长,所以分为两部分来记录。二:函数stat、fstat、fstatat和lstat 首先四个函数的具体定义如下:#include <sys/stat.h> int...原创 2019-05-12 20:50:26 · 159 阅读 · 0 评论 -
APUE读书笔记(6) 标准IO库(上)
第五章 标准IO库(上)一:主要内容: 本章主要讲述UNIX系统中标准IO库的实现,包括缓冲区的分配、流的概念、标准IO的效率等。二:流和FILE对象 对于流来说,他又两种模式。我们先不说这两种模式是什么,先来讨论一下字符集。我们通常所使用的字符集为ANSI字符集,ANSI字符集相比较于ASCII字符集多出了一部分数据,这里主要是因为原有的ASCII字符集仅仅适用于英语,不适用于其他语...原创 2019-05-26 23:10:29 · 124 阅读 · 0 评论 -
APUE读书笔记(5) 文件和目录(下)
第四章 文件和目录(下)十一:函数chown、fchown、fchownat和lchown 这几个函数都可用于更改文件的用户ID和组ID。原型如下:#include <unistd.h> int chown(const char *pathname, uid_t owner, gid_t group); int fchown(int fd, uid_t ...原创 2019-05-17 23:35:37 · 168 阅读 · 0 评论 -
APUE读书笔记(7) 标准IO库(下)
第五章 标准IO库(下)一:每次一行IO 下面的两个函数提供每次输入一行IO的功能:char *fgets(char *restrict buf, int n, FILE restrict fd);char *gets(char *buf);成功返回buf,失败返回NULL 这里我们并不推荐使用gets这个函数,因为他不指定读入缓冲区的数据大小,容易造成缓冲区溢出,当最后一行超过...原创 2019-06-02 23:42:14 · 137 阅读 · 0 评论 -
APUE读书笔记(8) 系统数据文件和信息
第五章 系统数据文件和信息一:主要内容: 本章主要讲述UNIX系统中与系统正常运行有强烈关系的系统数据文件,比如系统口令文件,组文件等。二:口令文件 口令文件包含如下字段: 口令文件在路径/etc/passwd中,并且是一哥ASCII文件,每一行包含上述字段,并且用冒号分隔。有两个函数可以获取口令文件: 其中getpwuid函数由ls程序使用,gwtpwnam函数由logi...原创 2019-06-09 22:33:34 · 216 阅读 · 0 评论 -
APUE读书笔记(9) 进程环境
第六章 进程环境一:主要内容: 本章主要介绍进程环境,主要包括程序执行时,main函数的调用过程;命令行参数的传递;典型的存储空间的布局等等。二:main函数 C程序从main函数开始执行,其原型为 其中argc为命令行参数的个数,argv是一个字符串指针数组,表示各参数内容。在调用main函数之前会启动一个特殊的例程,可执行文件将启动例程指定为程序的起始地址。三:进程终止 ...原创 2019-06-16 22:33:11 · 143 阅读 · 0 评论 -
APUE读书笔记(21) 守护进程
一:守护进程 守护进程是一类生存周期较长的进程,一般在系统开启的时候产生,系统关闭的时候才销毁。守护进程在后台运行,帮助UNIX系统执行日常事务活动。二:守护进程的特征 通过ps命令可以查看进程列表,可以展示进程号,父进程号等信息。父进程号为0的个进程一般为内核进程。内核进程的生命周期与整个系统的生命周期一样,它以超级用户权限执行,无控制终端,无命令行。 进程1为init进程,他是一...原创 2019-09-29 23:27:34 · 191 阅读 · 0 评论