/*20190528*/
/*APUE*/
/*第一章--UNIX基础知识*/
1.Unix操作系统体系结构
内核--》系统调用--》shell/公用函数库--》应用程序
2.登录口令
1. 口令文件:/etc/passwd;
2. 7个字段:登录名:加密口令:数字用户ID:数字组ID:注释字段:起始目录:shell程序(系统决定为用户执行哪一个shell
3.Shell
- 命令行解释器:读取用户输入,执行命令
2. 常用shell:bshell, cshell, kshell
4.文件和目录
- 文件名推荐在“字母”,“数字”,“.”,“-”,“_”范围内
- 绝对路径:/开头;相对路径名:相对于当前目录的文件
5.输入和输出
- 文件描述符:小的非负整数,内核用以标识一个特定进程正在访问的文件;读写文件时都可以使用
- 新程序文件描述符:标注输入,标准输出,标准错误,默认链向终端;可以重定向到某个文件(ls > file.list)
- 不带缓冲的I/O:read(), write(), open(), lseek(), close()都使用文件描述符
- 标准I/O:为不带缓冲的I/O提供了一个带缓冲的接口,无需考虑最佳缓冲区大小;简化了对输入行的处理;例如printf(), fgets()...定义在#include<stdio.h>中
- 标准I/O常量stdin, stdout;EOF也定义在#include<stdio.h>中
6.程序和进程
- 程序:存储在磁盘上某个目录的可执行文件;内核使用exec()函数将程序读入内存并执行
- 进程:程序的执行实例;UNIX系统确保每一个进程都有一个唯一的数字标识符(进程ID,非负整数)
- 进程控制:fork(), exec(), waitpid()
6.2线程
- 所有线程共享同一地址空间,文件描述符,栈,进程相关属性(访问同一存储区)
- 需采取同步措施
- 用ID标识,旨在所属进程内有效;可用线程ID引用该线程
7.出错处理
- #include<errno.h>中定义了errno及可以赋予的各常量
- 不出错其值不会被例程清除;任何函数都不会将errno置为0
- 打印出错信息函数strerror()【#include<string.h>】, perror()[#include<stdio.h>]
- 出错恢复:非致命性错误可以恢复
8.用户标识
(1)用户ID
(2)用户组ID
9.信号
(1)通知进程发生了某种情况
(2)处理方式:忽略,默认,信号处理函数
10.时间值
(1)日历时间
(2)进程时间(CPU时间):始终时间,用户CPU时间,系统CPU时间
11.系统调用和库函数
(1)系统调用:直接进入内核的入口点;UNIX为每个系统调用在标准c库中设置一个具有同样名字的函数
(2)库函数可以被替换,系统调用不能
(3)系统调用提供最小接口,库函数提供比较复杂的功能