我的APUE学习笔记(一)

第一章: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对进程的调度是轮询的。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值