一.UNIX体系结构
操作系统定义为一种软件,它控制计算机硬件资源,提供进程运行环境。通常叫这种软件为内核。
内核的接口被称为系统调用,公用库函数建立在系统调用接口。shell是一个特殊的应用程序,为运行其他引用程序提供了一个接口。
二.文件和目录
1.文件系统
UNIX文件系统是目录和文件的一种层次结构,所有东西的起点称为根(root)的目录,这个目录的名称是一个字符"/"。
目录是一个包含目录项的文件。在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件属性的信息,文件属性是指文件类型、文件大小、文件所有者、文件权限以及文件最后的修改时间等。
2.文件名
目录中的各个名字称为文件名。只有斜线和空白符这两个字符不能出现在文件名中。斜线是用来分割构成路径名的各文件名,空白符是用来终止一个路径名。创建文件最好注意一下命名的方式:字母、数字、句点、短横线、和下划线。
注:创建新目录时会自动创建两个文件名:.和..指向当前目录,..指向父目录。在最高层次的根目录中..和.相同。
3.路径名
有斜线分隔的一个或多个文件名组成的序列构成路径名,以斜线开头的路径名称成为绝对路径,否则称为相对路径名。相对路径名相当于当前目录的文件。文件系统根的名字是一个特殊的绝对路径名,它不包括文件名。
4.工作目录
每个进程都有一个工作目录,有时称其为当前工作目录。所有相对路径名都是从工作目录开始解释的。进程可以用chdir函数更改其工作目录。
5.起始目录
登陆时,工作目录设置为起始目录,该起始目录从口令文件开始中相应用户的登陆项中取得。
三.出错处理
当UNIX系统函数出错时,通常会返回一个负值,而且整形变量errno通常被设置为具有特定信息的值。
例如:
open函数如果成功执行则返回一个非负文件描述符,如出错则返回-1。在出错时,有大约15种不同的errno值。而有些函数对于出错则使用另一种约定而不是返回值。
例如:
大多数返回指向对象指针的函数,在出错时返回一个null指针。
文件<errno.h>中定义了errno以及可以赋与它的各种常量。这些常量都以字符E开头。在LINUX中可以使用man手册来查看errno的使用方法
四.时间值
历史上,UNIX系统使用过两种不同的时间值。
(1)日历时间。该值是1970.1.1 00:00:00这个特定时间以来所经过的秒数累计值。这些时间值可用于记录文件最近一次的修改时间等。系统基本数据类型time_t用于保存这种时间值。
(2)进程时间。也被称为CPU时间,用以度量进程使用的中央处理器资源。进程时间以时钟滴答计算。系统基本数据类型clock_t保存这种时间值。
五.系统调用和库函数
所有操作系统都提供多种服务的入口点,由此程序向内核请求服务。各种版本的UNIX实现都提供了良好定义、数量有限、直接进入内核的入口点,这些入口点被称为系统调用函数。
系统调用接口总是在《UNIX程序员手册》的第2部分中说明,是用第2部分中说明,是用C语言定义的,与具体系统如何调用一个系统调用的实现技术无关。
《UNIX程序员手册》的第三部分定义了程序员可以使用的通用库函数。虽然这些函数可能会调用一个或多个内核的系统调用,但是他们并不是内核的入口点。
一个可说明系统调用和库函数之间的差别例子是,UNIX系统提供的判断当前时间和日期的接口。
注:应用程序既可以调用系统调用也可以调用库函数。
系统调用和库函数之间的另外一个差别是:系统调用通常提供一种最小接口,而库函数通常提供复杂的功能。