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

24 篇文章 0 订阅
16 篇文章 1 订阅

这本书后续需要再读一遍

第一章 UNIX基础知识

1、文件描述符通常是一个小的非负整数,内核用以标识一个特定进程正在访问的文件。

2、open、read、write、lseek以及close提供了不带缓冲的IO。标准I/O函数为那些不带缓冲的I/O函数提供了一个带缓冲的接口。

3、程序是一个存储在磁盘上某个目录的可执行文件,内核使用exec函数将程序读入 内存,并执行程序。进程是程序的一个执行实例。线程,某一时刻执行的一组机器指令。

4、execlp函数要求的参数是一null结束的而不是以换行符结束的。 

5、用户ID标识不同的用户。组ID,标识不同组。附属组ID允许用户属于多个组。每一个磁盘上的文件都存储该文件所有者的用户ID 和组ID。

6、UNIX的系统调用一般在C库中会有一个同名函数。从实现者的角度看,系统调用和库函数之间有根本的区别,但从用户的角度来看,其区别不重要。应用程序即可以调用系统调用也可以调用库函数。很多库函数则会调用系统调用。

第三章 文件/IO

1、关闭一个文件时还会释放该进程加在该文件上的所有记录锁。

2、通过lseek设置的文件偏移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将加长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被读作0.但是空洞可能被并不占用磁盘空间。

3、大多数文件系统为改善性能都采用某种预读技术。当检测到正进行顺序读取时,系统就试图读入比应用锁要求的更多的数据。所以在一定情况下,read分配缓冲区32到524288,可能时钟时间相差不大。

4、每一个进程有一个进程表,进程表有一个记录项指向一张文件描述符表,文件描述符对应一个文件表项,文件表项指向一个v节点表项,v节点指向i节点,i节点也指向v节点。多个进程可以打开同一个文件,拥有不同的文件表项,共享相同的v节点和i节点。

5、在完成每个write后,在文件表项中的当前文件偏移量即增加所写入的字节数。如果这导致当前文件偏移量超出了当前文件长度,则将i节点表项中的当前文件长度设置为当前文件偏移量。lseek函数只修改文件表项中的当前文件偏移量,不进行任何IO操作。

6、pread和pwrite可以实现原子操作。

7、 FD_CLOEXEC 标志,进程中每个打开描述符都有一个执行时关闭标志。若此标志设置,则在执行 exec 时关闭该描述符,否则该描述符仍打开。除非特地用 fcntl 设置了该标志,否则系统的默认操作是在执行 exec 后仍保持这种描述符打开。

第四章 文件和目录

1、用户ID、有效ID,参考:linux下进程的实际用户ID(有效组)和有效用户ID(有效组ID)

2、用户可以设置umask值以控制他们所创建文件的默认权限。该值表示成八进制数,一位代表一种要屏蔽的权限。

第七章、进程环境

1、函数atexit,一个进程可以登记多至32个函数,这些函数将由exit自动调用。我们称这些函数为终止处理程序,并调用atexit函数来登记这些函数。

2、C程序的存储空间布局:(1)正文段、即代码段、存放指令可共享(2)初始化段、在代码中初始化的全局变量。(3)未初始化段、代码中未初始化的全局变量,有内核初始化为0或空指针。(3)堆、动态分配空间。(4)栈、自动变量以及每次函数调用时所需保存的信息都存放在此段。栈和堆的增长方向相反。参考:Linux下C程序的存储空间布局

3、共享库、大多数UNIX系统支持共享库,用动态链接的方式将程序与共享库函数相链接。

4、虽然sbrk可以扩充或缩小进程的存储空间,但是大多数malloc和free的实现都不减少进程的存储空间。释放的空间可供以后再分配,但将他们保持在malloc池中而不返回给内核。

5、大多数实现所分配的存储空间比所要求的要稍大一点,额外的空间用来记录管理信息。这意味着,如果超过一个已分配区的尾端或起始位置之前进行写操作,则会改写一些管理信息,这种类型的错误是灾难性的。

6、环境表(指向实际name=value字符串的指针数组)和环境字符串通常存放在进程存储空间的顶部(栈之上)。并且空间长度不能增加。如果需要更多的空间只能调用malloc重新分配空间,并将environ指向新指针表。

7、goto语句是不能跨越函数的。但是setjmp和longjmp可以。但是大多数实现并不回滚这些自动变量和寄存器变量的值。

第八章、进程控制

1、ID为0的进程通常是调度进程,常常被称为交换进程。该进程是内核的一部分。进程ID为1通常是init进程,在自举过程结束后由内核调用。

2、可移植的应用程序不应该使用vfork,vfork保证子进程先运行

3、不管进程如何终止,最后都会执行内核中的同一段代码,这段代码为相应进程关闭所有打开描述符,释放它所使用的存储器。内核为每个终止子进程保存了一定量的信息,所以当终止进程的父进程调用wait或waitpid时,可以得到这些信息。一个已经终止,但是其父进程尚未对其进行善后处理的进程被称为僵死进程。

4、exec只是用磁盘上的一个新程序替换了当前进程的正文段、数据段、堆段和栈段。

本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、 进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库, PostScript 打印机驱动程序,调制解调器拨号器及在伪终端上运行其他程序的程序等。 本书内容丰富权威, 概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士 —都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时间限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值