为了防止半途而废,现如今将2020年看过的APUE重新开始进行阅读,并且以文章的形式进行记录达到:复习和 激励的目的
此章节是APUE的前导章节,简要的介绍了UNIX环境和相较与Windows下的专有名称及意思
文件和目录- 文件系统
在 unix 系统下文件的起点是根, 用字符"/"表示,所以我们常听到根目录
- 文件名
目录中的各个文件的名称,在新创建的文件下会自动创建两个文件名: .(当前目录) …(上层目录) 。
- 路径名称
路径名称分为绝对路径和相对路径,
-
绝对路径是以根目录(/)下的构成的路径
-
相对路径是相对与当前目录下的路径
- 工作目录
每个进程都有自己的工作目录,进程可以通过 chdir 来更改工作目录
输入和输出- 文件描述符
是一个非负整数,内核用于标识特定进程正在访问的程序,当内核操作一个文件是都会返回一个文件描述符
- 标准输入/输出/错误
当运行一个新的程序时,shell 都会为其打开3个文件描述符 stdin / stdout / stderr,
- 不带缓冲的I/O
用户层面没有缓存,通过系统调用直接对磁盘进行读写,但是对于内核层面来说还是存在缓存,内核现将数据写缓存中,当其溢出再进行操作
open() , read() ,write() , lseek() , close() 都提供了不带缓冲的I/O
- 标准I/O
给不带缓冲I/O函数提供了带缓冲I/O接口,故无需担心选取多大的缓冲区大小
程序和进程- 程序
存储在磁盘上的某个可执行文件。内核通过exec函数将其读入内存,并执行
- 进程和进程ID
程序执行的实例被成为进程,并且每个进程都有唯一区分的数字标识符叫进程ID
getpid() 可获取当前进程ID
- 进程控制
fork() , exec() , waitpid()
- 线程和线程ID
通常一个进程只有一个线程(thread),但是为了充分发挥 CPU 的处理性能,一个程序可以有多个线程用于处理不同部分。一个进程内的所有线程共享同一个地址空间,文件描述符,栈,以及进程相关属性。因为不同的线程可以访问同一个地址空间,故在访问数据时要注意同步,保持数据的一致性。
线程ID是一个局部变量,仅仅在进程中起作用
出错处理unix 系统出错时会返回一个负值,并且通过 errno 的不同数字用于区分不同的错误
规则
-
如果没有出错 errno 不会被清除,只有在出错时才会被设置
-
errno 不会被设置为 0
用于通知进程发生了某种情况
处理方式
-
忽略信号
-
按照系统默认的方式处理
-
提供一个函数,信号发生时捕捉该信号,并通过自定义函数来进行处理
- 日历时间
该值来自协调世界时(Coordinated Universal Time,UTC)用于记录文件最近一次修改时间
通过 time_t 类型保存该时间值
- 进程时间
也被成为 CPU 时间,用于度量进程使用的中央处理器资源,该时间以实在滴答计算
通过 clock_t 类型保存该时间值
度量一个进程的执行时间时,有三个进程时间值:时钟时间,用户 CPU 时间,系统 CPU 时间
系统调用和库函数操作系统提供多种服务的入口点,由此程序可以向内核请求服务,这些进入点被成为系统调用
库函数则是建立在内核的基础上进行封装的实现较为复杂功能的函数,可替代性相比系统调用比较强



