UNIX基础知识
- UNIX体系结构图

- 登录
- /etc/passwd结构:登录名:加密口令:用户ID:组ID:注释字段:开始目录:shell(共7个字段)
- shell是一个命令行解释器,读取用户输入,执行命令
- 文件目录
- ls命令简易实现,第4章具体研究
- opendir打开目录返回DIR类型指针
- readdir获取DIR类型指针,返回dirent类型指针,dirent结构体中有d_name为目录项名字
- closedir关闭opendir打开目录返回的DIR
- 上面几个函数包含在<dirent.h>中
- 输入输出
- 文件描述符是一个小的非负整数,标识特定进程正在访问的文件
- 标准输入、输出、错误STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO在POSIX标准中值分别为0,1,2,定义在头文件<unistd.h>
- open、read、write、lseek、close提供了不带缓存的I/O,这些都函数使用文件描述符,包含在头文件<unistd.h>
- stdin、stdout、stderr定义在<stdio.h>中,表示标准输入、输出、错误
- 标准IO getc、putc、gets、puts自带缓存区,包含于stdio.h
- 程序和进程
- 程序是磁盘上的可执行文件,内核使用exec函数将程序读入内存,执行,共7个exec函数,第8章具体说明
- 程序执行实例为进程,有的操作系统也称任务,UNIX系统确保每个进程都有一个唯一数字标识符,即进程ID,使用getpid获取当前进程ID,返回pid_t类型,该类型最大为一个长整型
- fork创建一个新进程,对父进程返回子进程ID,对子进程返回0。exexlp执行一个命令。waitpid等待一个进程结束,终止状态存在参数status中
- 一个进程内所有线程共享同一地址空间、文件描述符、栈以及与进程相关的属性,线程也有标识ID,只在进程内有效,12章具体研究线程
- 出错处理
- <errno.h>中定义了errno和可以赋予它值的常量,注意两条规则:1.如果没有出错,其值不会被例程清除,仅当函数返回值指明出错时才检验其值。2.任何函数不会将errno值设为0,<errno.h>中的常量也没有0
- C标准定义了两个函数,打印出错信息:1.strerror(int errnum)将errnum映射为出错消息字符串,并返回指针2.perror传入一个消息根据error的值,在其后输出错误
- 用户标识
- root的用户ID为0
- /etc/group中包含用户组的具体信息,大多数系统允许一个用户属于多个组
- getuid 获取当前用户id , getgid 获取当前用户组id
- 信号
- singnal(信号,函数)来指明当产生“信号”时要调用的“函数”
- 在第10章具体研究
- 时间值
- 日历时间:1/1/1970 00:00:00以来经历的秒数,使用time_t保存
- 进程时间:以时钟滴答计算,用来度量进程使用CPU资源。度量一个进程的执行时间,UNIX用3个进程时间值维护
- 时钟时间:(wall clock time)是进程运行总时间,从进程开始到进程结束,包含中断和其他进程占用CPU的时间
- 用户CPU时间:执行用户指令的时间量
- 系统CPU时间:该进程在执行内核程序所经历的时间
- /usr/bin/time是一个内置函数测量进程时间
- 系统调用和库函数
- 操作系统提供多种服务入口点,由此程序向内核请求服务,这些入口点被称为系统调用,系统调用接口可视为C函数
- 系统调用和库函数在用户看来都是C函数,但有本质区别
