第一章:UNIX基础知识
1、系统在其口令文件,通常是/ e t c / p a s s w d文件中查看登录名。口令文件中的登录项由7个以冒号分隔的字段组成:登录名,加密口令,数字用户I D ( 2 2 4 ),数字组I D ( 2 0 ),注释字段,起始目录( / h o m e / s t e v e n s ),以及s h e l l程序( / b i n / k s h )。
例如:huangyidong:x:530:600::/home/huangyidong:/bin/bash
2、s h e l l是一个命令行解释器,它读取用户输入,然后执行命令,用户通常用终端,有时则通过文件 (称为s h e l l脚本)向s h e l l进行输入。常用的s h e l l有:
• Bourne shell, /bin/sh
• C shell, /bin/csh
• KornShell, /bin/ksh
3、文件属性包括:文件类型、文件的许可权、文件或目录的硬连接数量、文件所有者、文件所属组、文件长度、文件最后的修改时间、文件名8项
[huangyidong@centos6 ~]$ ls -l
total 292
-rw-r--r-- 1 huangyidong trainning 785 Mar 30 2013 a.c
-rwxr-xr-x 1 huangyidong trainning 7519 May 4 02:42 a.out
4、绝对路径(absolute pathname):以斜线开头的路径名称。相对路径(r e l a t i v e p a t h n a m e)。
5、exit函数:0正常退出,1~255出错退出。
6、标准输入、输出和错误输出
int类型:STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO
FILE *指针类型:stdin、stdout、stderr
EOF int -1
7、检查和设置流状态函数:
ferror函数:检查文件流的错误指示符是否被设置。如果被设置,返回非0。
feof函数:检查文件流的到达文件尾指示符是否被设置,如果被设置,返回非0。
clearerr函数:清除被设置的错误指示符和到达文件尾指示符。
fileno函数:检查文件指针(FILE *),并返回它的文件标识符(int)。
8、进程process。
用于进程控制的主要函数:fork、exec族、waitpid。
使用exec函数由内核将程序读入存储器,并使其执行。
9、文件结束字符Ctrl+D
10、类属指针的作用。
ANSI C使用void *作为类属指针来代替char *,这样函数原型和类属指针的组合消去了很多非ANSI C编辑程序需要的显式类型强制转换。
11、以_t结尾的数据类型被称为原始数据类型或基本系统数据类型(primitive system data type),如pid_t、size_t等,通常在<sys/types.h>中定义。
它们的目的是阻止程序使用专门的数据类型(如int、long等)来允许对于一种特定系统的每个实现选择所要求的数据类型。这样,在各个不同的实现中,应用程序的差别只出现在一个头文件中,方便应用程序在不同系统中的移植。
12、出错处理。
整型变量errno:
1)如果没有出错,errno的值不会被程序改变。
2)任一函数都不会将errno的值设置为0。
打印出错信息:
char *strerror( int errno ) 将errno值映射为一个出错信息字符串。
void perror(const char *msg) 先输出由msg指向的字符串,然后是冒号、空格,然后是对应于errno值的出错信息,并换行。
13、信号的处理方式:
1)忽略该信号
2)按系统默认方式处理
3)捕捉信号,提供一个函数,当指定信号发生时则调用该函数
产生信号的方式:
1)键盘。有两种。中断键:Delete或者Ctrl+C。退出键:Ctrl+\:
2)调用kill函数。当我们通过在进程A中调用kill向进程B发送信号时,我们必须是进程B的所有者。
3)硬件异常。如除0错误SIGFPE
4)当检测到某种软件条件已经发生,并将其通知有关进程时。如SIGALRM(闹钟时间超时)
SIGUSR1和SIGUSR2是用户定义信号。core文件复制了进程的存储图像,可供调试程序使用以检查进程在终止时的状态。
14、信号函数的原型:
void (*signal(int _sig,void(*_func)(int)))(int)
表示函数signal,有两个参数,第一个参数是int类型的_sig,第二个参数是个函数指针void(*_func)(int),它指向一个返回void,并且有一个int参数的函数,signal函数的返回值为一个函数指针,指向一个返回void,并且有一个int参数的函数。
func的两个特殊值:SIG_IGN表示忽略信号,SIG_DFL为默认处理,而SIG_ERR是signal函数出错。
#define SIG_DFL ((void(*)(int))0)
#define SIG_IGN ((void(*)(int))1)
#define SIG_ERR ((void(*)(int))-1)
将整数0、1或者-1强制转化为一个函数指针,函数返回void,并且接收一个int参数
或者用下面的方式定义signal:
typedef void Sigfunc(int);
则signal函数就可以写成:
Sigfunc *signal(int, Sigfunc *);
15、系统调用(system call),即unix的内核入口点,是不能更改的一种unix的特征。
unix为每个系统调用在标准C库中设置一个具有相同名字的函数,用户进程用标准C序列来调用这些函数,然后函数又用系统所要求的技术调用相应的内核服务。C库函数可能会调用一个或多个内核的系统调用,也可能并不使用任何系统调用。
16、UNIX时间值
1)日历时间:1970年1月1日0:00以来国际标准时间(UTC)所经过的秒数。
2)进程时间,也叫CPU时间:=用户CPU时间+系统CPU时间。进程时间以时钟滴答来计算。
3)时钟时间:进程运行的时间总量,它和系统中同时运行的进程数量有关,因为cpu对进程的调度是轮询的。