内核:可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。一般而言,我们称这种软件为内核(KERNEL)。它相对较小,位于环境的中心。
UNIX系统调用:
内核,系统调用)
Shell,库函数
应用软件
最下层是内核,最上层是应用软件
Shell:Shell是一种特殊的应用程序,它为运行其他应用程序提供了一个接口。它是一个命令行解释器,它读取用户输入,然后执行命令保存用户密码的文件中,最后一个字段指名了用户使用哪个shell,系统通过检测这个字段,来选择使用哪个Shell。
操作系统:内核和程序运行环境
文件和目录:
目录的起点成为根(root),其名字是一个字符/。目录是一个包含许多目录项的文件,在逻辑上,可以认为每个目录项都包含一个文件名,同时还包含说明该文件树形的信息。
文件属性包括:文件类型、文件大小、文件权限(其他用户能否访问该文件)以及文件最后的修改事件等。stat和fstat函数返回包含所有文件属性的一个信息结构。
文件名要求:不能出现在文件名中的字符只有斜线(/)和空操作符两个。斜线用来分割构成路径名的各文件名,空操作符则用来标示文件名的结束。
路径名:
一个或多个以斜线分割的文件名序列构成路径名,以斜线开头的路径名称为绝对路径名 ,否则称为相对路径名。文件系统根的名字(/)是一个特殊的绝对路径名,它不包含文件名
输入输出:
文件描述符:通常是一个小的非负整数,内核用它标识一个特定的进程正在访问文件。
每当运行一个进程时,所有的shell都为其打开三个描述符:标准输入,标准输出,以及标准出错。
程序和进程:
程序:程序是存放在磁盘上、处于某个目录中的一个可执行文件。使用6个exec函数由内核将程序读入存储器,使其执行。
进程:程序的执行实例称为进程。进程ID总是一非负数。获得当前进程编号:getpid()
错误处理:
规则:
1、如果没有出错,errno的值不会被一个例程清除,因此,仅当函数的返回值指明出错时,才效验期值。
2、任何一个函数都不会将errno的值置为0.
两个处理错误的函数:
char *strerror(int errnum);
void perror(const char *msg);
perror是标准库中的函数,msg参数用于说明错误出在哪
strerror返回错误信息通过错误ID
用户标识:
用户ID通过getuid来获得
组ID通过getgid来获得
用户和密码信息保存在/etc/passwd和/etc/shadow文件中
信号:
信号是通知进程已发生某种事件的一种技术。通过Ctrl+字母可以发送事件给终端下运行的程序。如果程序需要处理信号,必须先注册信号处理函数,然后当事件触发的时候,以回调的方式来响应。
时间表示:
1、日历时间:使用UTC(国际标准时间,从1970年开始)时间来表示,该时间是1970年开始所累计的秒数值。C语言中的函数都是使用这种来表示的,如time_t
2、进程时间:CPU时间,用以度量进程使用的CPU资源。UNIX提供一个类型clock_t来保存这种时间值,通过sysconf来获得。unix提供shell程序time来获得时间。