一、文件和目录
1.文件系统
- UNIX文件系统是目录和文件的一种层次安排,目录的起点称为根 (root),其名字是一个字符/。
- 目录(directory)是一个包含目录项的文件,在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息。文件属性是:文件类型,文件长度,文件所有者,文件的许可权(例如,其他用户能否能访问该文件),文件最后的修改时间等。
2.文件名
- 目录中的各个名字称为文件名(filename)。不能出现在文件名中的字符只有两个,斜线 (/)和空操作符(null)
- 当创建一个新目录时,自动创建了两个文件名: . (称为点)和. . (称为点-点)。点引用当前目录,点-点则引用父目录。在最高层次的根目录中,点 -点与点相同。
3.路径名
- 0个或多个以斜线分隔的文件名序列 (可以任选地以斜线开头)构成路径名(pathname),以斜线开头的路径名称为绝对路径名(absolute pathname),否则称为相对路径名(relativepathname)。
4.工作目录
- 每个进程都有一个工作目录 (working directory,有时称为当前工作目录 (current working directory))。所有相对路径名都从工作目录开始解释。
5.起始目录
- 登录时,工作目录设置为起始目录(home directory),该起始目录从口令文件的登录项中取得。
二、输入和输出
1.文件描述符
- 文字描述符是一个小的非负整数,内核用以标识一个特定进程正在存访的文件。当内核打开一个现存文件或创建一个新文件时,它就返回一个文件描述符。当读、写文件时,就可使用它。
2.标准输入、标准输出和标准出错
- 按惯例,每当运行一个新程序时,所有的 shell都为其打开三个文件描述符:标准输入、标准输出以及标准出错。
3.不用缓存的I/O
- 函数open、read、write、lseek以及close提供了不用缓存的I/O。这些函数都用文件描述符进行工作。
4.标准I/O
- 标准I / O函数提供一种对不用缓存的I / O函数的带缓存的界面。
三、程序和进程
1.程序
- 程序(program)是存放在磁盘文件中的可执行文件。使用 6个exec函数中的一个由内核将程序读入存储器,并使其执行。
2.进程和进程ID
- 程序的执行实例被称为进程(process)。本书的每一页几乎都会使用这一术语。某些操作系统用任务表示正被执行的程序。
- 每个UNIX进程都一定有一个唯一的数字标识符,称为进程 ID(process ID)。进程I D总是一非负整数。
3.进程控制
- 有三个用于进程控制的主要函数:fork、exec和waitpid(exec函数有六种变体,但经常把它们统称为exec函数)。
四、ANSI C
1.函数原型
- 头文件<unistd.h>包含了许多UNIX系统服务的函数原型,例如已调用过的read,write和getpid函数。函数原型是ANSI C标准的组成部分。
2.类属指针dd
- ANSI C使用void *作为类属指针来代替 char *。
- 函数原型和类属指针的组合消去了很多非ANSI C编辑程序需要的显式类型强制转换。
3.原始系统数据类型
- 前面所示的getpid函数的原型定义了其返回值为pid_t类型,这也是POSIX中的新规定。UNIX的早期版本规定此函数返回一整型。与此类似,read和write返回类型为size_t的值,并要求第三个参数的类型是size_t。以_t结尾的这些数据类型被称为原始系统数据类型。
五、出错处理
- 当UNIX函数出错时,往常返回一个负值,而且整型变量errno通常设置为具有特定信息的一个值。
- 文件<errno.h>中定义了变量errno以及可以赋与它的各种常数。
六、用户标识
1.用户ID
- 口令文件登录项中的用户ID(user ID)是个数值,它向系统标识各个不同的用户。系统管理员在确定一个用户的登录名的同时,确定其用户ID。用户不能更改其用户ID。通常每个用户有一个唯一的用户ID。
2.组ID
- 口令文件登录项也包括用户的组ID(group ID),它也是一个数值。组 ID也是由系统管理员在确定用户登录名时分配的。一般来说,在口令文件中有多个记录项具有相同的组 ID。在UNIX下,组被用于将若干用户集合到课题或部门中去。这种机制允许同组的各个成员之间共享资源(例如文件)。
3.添加组ID
- 除了在口令文件中对一个登录名指定一个组ID外,某些UNIX版本还允许一个用户属于另外一些组。
七、信号
- 信息是通知进程已发生某种条件的一种技术。例如,若某一进程执行除法操作,其除数为0,则将名为SIGFPE的信号发送给该进程。
八、UNIX时间值
- 长期以来,UNIX系统一直使用两种不同的时间值:
- 日历时间
- 进程时间
- 当度量一个进程的执行时间时,UNIX系统使用三个进程时间值:
- 时钟时间
- 用户CPU时间
- 系统CPU时间
九、系统调用和库函数
- 所有的操作系统都提供多种服务的入口点,由此程序向内核请求服务。各种版本的UNIX都提供经良好定义的有限数目的入口点,经过这些入口点进入内核,这些入口点被称为系统调用(system call)。系统调用是不能更改的一种UNIX特征。
参考文献《UNIX环境高级编程》