《UNIX环境高级编程》阅读笔记.doc

上传人:新** 文档编号:561612623 上传时间:2024-02-04 格式:DOC 页数:7 大小:52.51KB
返回 下载 相关 举报
《UNIX环境高级编程》阅读笔记.doc_第1页
第1页 / 共7页
《UNIX环境高级编程》阅读笔记.doc_第2页
第2页 / 共7页
《UNIX环境高级编程》阅读笔记.doc_第3页
第3页 / 共7页
《UNIX环境高级编程》阅读笔记.doc_第4页
第4页 / 共7页
《UNIX环境高级编程》阅读笔记.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《《UNIX环境高级编程》阅读笔记.doc》由会员分享,可在线阅读,更多相关《《UNIX环境高级编程》阅读笔记.doc(7页珍藏版)》请在金锄头文库上搜索。

1、UNIX环境高级编程(第二版)(人民邮电出版社)【美】W.Richard Stevens & Stephen A.Rago 著尤晋元 张亚英 戚正伟 译目录第1章 :UNIX基础知识1第2章 :UNIX标准及其实现2第3章 :文件I/O2第4章 :文件和目录2第5章 :标准I/O库2第6章 :系统数据文件和信息3第7章 :进程环境3第8章 :进程控制3第9章 :进程关系4第10章 :信号4第11章 :线程4第12章 :线程控制4第13章 :守护进程5第14章 :高级I/O5第15章 :进程间通信5第16章 :网络IPC:套接字5第17章 :高级进程间通信6第18章 :终端I/O6第19章 :伪

2、终端6第20章 :数据库函数库6第21章:与网络打印机通信6第1章 :UNIX基础知识UNIX体系结构中,最主要的是内核,它有一些称为系统调用的接口与外界交互。在内核之上有shell 和库函数,然后是应用软件。常见的shell有Bourne shell(sh), Bourne_again shell(bash), C shell(csh), Korn shell(ksh), TENEX C shell(tcsh)。不能出现在文件名中的字符只有斜线(/)和空操作符(null)两个。文件描述符(file descriptor)通常是一个小的非负整数。当一个进程收到一个信号时,有三种选择:忽略该信号

3、;按系统默认方式处理;提供一个函数,信号发生时调用这个函数。第2章 :UNIX标准及其实现1、本章介绍了三个主要标准:ISO C、POSIX和Single UNIX Specification 。POSIX标准中的都只是接口,而不是实现,所以不区分系统调用和库函数,都称为函数。Single UNIX Specification(单一UNIX规范)是POSIX.1标准的一个超集,定义了一些附加的接口。2、提高移植性的限制有两类:编译时限制和运行时限制。ISO C定义的限制都是编译时限制,列在头文件中。POSIX.1定义的限制和常量有5类:不变的最小值;不变值;运行时可以增加的值;运行时不变的值(

4、可能不确定);路径名可变值(可能不确定)。3、如果在编译一个程序时,希望它只使用POSIX的定义而不使用任何其他的定义,就需要定义常量_POSIX_C_SOURCE。第3章 :文件I/O1、UNIX系统中的大多数文件I/O只需用到5个函数:open、read、write、lseek以及close。由于新的open函数提供了O_CREAT和O_TRUNC选项,也就可以完全替代creat函数了。Lseek函数的作用就是为一个打开的文件设置其当前文件偏移量,定位读写的位置。2、内核使用三种数据结构表示打开的文件:进程表中的一个记录项、文件表、v节点(在Linux中由通用型的i节点来实现)。3、使用p

5、read和pwrite函数可以实现原子读写。Dup和dup2函数可以复制一个现存的文件描述符。Sync、fsync和fdatasync函数可以使放在缓存中的数据写入磁盘,免得系统崩溃时造成数据丢失。Fcntl函数可以改变已打开文件的性质。第4章 :文件和目录1、本章讨论的中心是3个stat函数以及它们返回的信息。Stat函数返回文件的信息结构,fstat函数获取描述符为filedes的文件的有关信息,lstat可以返回符号链接的有关信息而不是它所指向的文件的有关信息。2、其他函数:access函数按实际用户ID和实际组ID进行访问权限测试;umask函数为进程设置文件模式创建屏蔽字;chmod

6、和fchmod函数用于更改现有文件的访问权限;chown、fchown和lchown函数用于更改文件的用户ID和组ID;truncate和ftruncate函数把现有文件截短为参数length字节;link、unlink创建和删除一个指向现有文件的链接(硬链接);symlink函数创建一个符号链接;utime函数可以更改一个文件的访问和修改时间;chdir、fchdir函数可以更改当前工作目录;getcwd返回工作目录的绝对路径。第5章 :标准I/O库1、在UNIX系统中,标准I/O库最终都要调用第3章中说明的I/O例程。2、当用标准I/O库打开或创建一个一个文件时,我们已使一个流与一个文件相

7、关联。每个标准I/O流都有一个与其相关联的文件描述符,可以对一个流调用fileno函数以获取其描述符。3、对一个进程预定义了3个流:标准输入、标准输出和标准出错。4、打开标准I/O流的函数:fopen、freopen、fdopen。用fclose函数关闭。5、流的读写函数:getc、putc,fgetc、fputc,getchar、putchar,fgets、fputs,gets、puts(这一对不推荐使用)。6、格式化输入输出函数:printf、scanf,fprintf、fscanf,sprintf、snprintf、sscanf。7、使用tmpnam和tmpfile函数可以创建临时文件。

8、第6章 :系统数据文件和信息1、一般情况下,对于每个数据文件至少有三个函数:get函数,读出记录;set函数,打开文件然后反绕它;end函数,关闭文件。2、与用户ID相关的几个重要的文件是:口令文件(passwd);阴影口令文件(shadow);组文件(group);utmp文件,记录当前登录进系统的各个用户;wtmp文件,跟踪各个登录和注销事件。3、关于时间和日期的一个函数。Time函数返回当前时间:自1970年1月1日零时以来的秒数,而且是国际标准时间。Gettimeofday函数与time类似,只是可以提供更高的分辨率(微秒)。Localtime和gmtime函数将日历时间转换成以年、月

9、、日、时、分、秒周日表示的时间,填充struct tm结构。而mktime函数则相反,转换成time_t值,也就是日历时间。Asctime和ctime函数产生26字节的字符串,表示年月日时分秒等信息。Strftime函数提供格式化的时间表示,类似于printf函数。第7章 :进程环境1、进程的正常终止大多是调用exit函数,它先调用各终止处理程序(由atexit函数登记),然后按需多次调用fclose关闭打开的所有流。2、一个C程序的组成部分:正文段(指令)、初始化数据段、非初始化数据段(bss)、栈(函数调用时使用)、堆(动态存储分配)。3、存储空间的动态分配函数有3个:malloc、cal

10、loc、realloc。而free函数释放存储空间。4、系统中的环境变量由各个应用程序解释使用,内核不过问。相关的3个函数,putenv添加一个环境变量、setenv更改一个环境变量、unsetenv删除一个环境变量。5、在C中,goto语句是不能跨越函数的,而执行这类跳转功能的是函数setjmp和longjmp 。6、使用getrlimit和setrlimit函数查询和修改系统对一个进程的资源限制。第8章 :进程控制1、每一个进程都有一个非负整型表示的唯一进程ID。这是最重要的一个进程标识符。2、本章的重点fork。一个现有进程可以调用fork函数创建一个新进程。有两种用法:一个父进程希望复

11、制自己,使父、子进程同时执行不同的代码段;一个进程想启动一个完全不一样的进程(例如利用shell执行命令)。Fork调用一次返回两次,在子进程中返回0,在父进程中返回子进程的ID。3、vfork用于创建一个新进程,但其目的是exec一个新程序。就像fork的第二种用法。但是vfork保证子进程先运行。而对于fork,子进程还是父进程先运行是不确定的。4、对于一个进程的任意一种终止情形,我们都希望被终止的进程能够通知其父进程它是如何终止的。终止函数exit、_exit和_Exit把进程的退出状态作为参数传递给函数。5、调用wait和waitpid函数可以等待子进程终止的异步信号的通知。但是一个子

12、进程终止之前,wait使其调用者阻塞,而waitpid有一个选项,可使调用者不阻塞。6、exec函数族。调用exec函数不创建新的进程,前后进程ID并不改变,它只是用一个全新的程序替换了当前进程的正文、数据、堆和栈。一共有6个函数:execl、execv、execle、execve、execlp和execvp。Exec函数的一种变体:解释器文件。Shell脚本是其中比较常见的一种。第9章 :进程关系 1、本章最重要的是三个概念:进程组、会话和作业控制。进程组是一个或多个进程的集合,拥有一个唯一的ID,有一个组长进程。进程可以通过调用setpgid来加入一个现有的组或者创建一个新进程组。而会话是

13、一个或多个进程组的集合,进程调用setsid函数建立一个新会话。作业控制允许在一个终端上启动多个作业(进程组),它控制哪一个作业可以访问终端,哪些作业在后台运行。第10章 :信号1、这一章是相当重要的一章,用了50多页来讲解。含有大量的实例程序,讲解得比较深入。2、信号是软件中断,用于处理异步事件。每一个信号都有一个名字,而且都以三个字符SIG开头,对应一个整型编号。信号产生的情况:用户按下某些终端按键;硬件异常;调用kill函数发送;用户使用kill命令发送;检测到某种软件条件已经发生。三种信号处理方法:忽略它;捕捉它,然后调用特定的用户函数;执行系统默认动作。3、一些与信号有关的重要的函数

14、。Signal函数用于设置某信号的处理程序,在很多平台该函数都是由sigaction函数来实现的。Kill函数将信号发送给进程或进程组。Alarm函数设置过一段时间后发送信号给自己,而pause函数使自己挂起直到捕捉到一个信号。Sigprocmask函数可以检测或更改其信号屏蔽字。Sigpending函数返回对应进程是阻塞的信号集。Sigsuspend函数解除一个阻塞信号并且马上使进程休眠,两步是一个原子操作。Abort函数用于使异常程序终止,进程接收到信号后终止之前可以执行一些必须的清理工作。第11章 :线程1、这一章有三部分的内容,线程的概念、线程的创建和终止、线程的同步。2、多线程设计的

15、好处:使得处理异步事件的代码变得简化。共享方便。提高整个程序的吞吐量。改善交互程序的响应时间。3、线程包含了表示进程内执行环境必需的信息,包括线程ID(只在它所属的进程环境中有效)、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。4、线程的创建使用pthread_create函数。但是创建后不保证哪一个线程先运行。如果进程中的任一线程调用了exit、_Exit或者_exit,那么整个进程就会终止。而单个线程有三种方式推出:从启动例程中返回。被同一进程中的其他线程取消。自己调用pthread_exit函数。5、实现线程同步主要有三种方式:使用互斥量、使用读写锁、使用条件变量。第12章 :线程控制1、 线程属性存放于数据结构pthread_attr_r中。可以使用函数pthread_attr_init函数来初始化这个数据结构,使用pthread_attr_destroy函数来用无效数值填充,即“反初始化”。使用函数pthread_attr_setdetachstate函数修改结构中的detachstate属性,可以让线程以分离状态启动。线程的栈属性通过pthread_attr_setstack函数来设置。2、线程的同步属性包括互斥量属性、读

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号