一 、Unix基础知识
1、Linux 用户文件:/etc/passwd,其格式如下:
登录名:x:uid:gid:注释:起初目录:shell程序
2、文件名为除(/)和空字符之外的任一字符,POSIX推荐:字母、数字、句号(.)、短横线(-)、下划线(_)。
3、errno字义在<errno.h>中,每个线程都有它局部的errno。打印出错信息的函数如下:
#include <string.h>
char *strerror(int errnum); // 返回相应errnum的字符串
#include <stdio.h>
void perror(const char *msg); // 返回 [msg:<当前errno的字符串><\n>]
4、<errno.h>中定义的错误类型:致命性的、非致命性的
与资源相关的非致命性错误:EAGAIN、ENFILE、ENOBUFS、ENOLCK、ENOSPC、EWOULDBLOCK
5、组文件:/etc/group,POSIX要求至少支持8个附属组,但实现大多数系统至少支持16个。
6、可键盘产生的信号:中断键(Delete键或Ctrl+C) (SIGINT : )、退出键(Ctrl+\)。
也可用kill函数产生(限制:向一个进程发送信号,必须为该进程的所有者或者为超级用户)
7、两种时间值:日历时间(1970-1-1 00:00:00 至今的秒数)
数据结构:time_t
进程时间(CPU时间):以时针滴答计算,每秒取值不定,如50、60、100等 (用sysconf()得到)
数据结构:clock_t
8、进程时间的度量:
时针时间:进程运行的时间总量
用户CPU时间
系统CPU时间
用户CPU时间和系统CPU时间之和为CPU时间
打印进程时间,如下:
time -p 命令
real 0.09 时针时间
user 0.00 用户CPU时间
sys 0.00 系统CPU时间
二、Unix标准与实现
1、restrict关键字:告诉编译器指针可优化,指出该指针的对象在函数中只能通过该指针进行访问;
2、ISO C标准头文件(24个):
<assert.h>----------------------验证程序断言
<complex.h> ----------------------支持复数算术运算
<ctype.h> ----------------------字符类型
<errno.h> ----------------------出错码
<fenv.h> ----------------------浮点环境
<float.h> ----------------------浮点常量
<inttypes.h> ----------------------整型格式转换
<iso646.h> ----------------------替代关系操作符宏
<limits.h> ----------------------实现常量
<locale.h>----------------------局部类别
<math.h> ----------------------数学常量
<setjmp.h>----------------------非局部goto
<signal.h> ----------------------信号
<stdarg.h>----------------------可变参数表
<stdbool.h> ----------------------布尔类型和值
<stddef.h> ----------------------标准定义
<stdint.h> ----------------------整型
<stdio.h>----------------------标准I/O库
<stdlib.h> ----------------------实用程序库函数
<string.h> ----------------------字符串操作
<tgmath.h>----------------------通用类型数学宏
<time.h>----------------------时间和日期
<wchar.h>----------------------扩展的多字节和宽字符支持
<wctype.h> ----------------------宽字符分类和映射支持
3、POSIX标准定义的必须的头文件(26项)
<dirent.h>----------------------目录项
<fcntl.h>----------------------文件控制
<fnmatch.h>----------------------文件名匹配类型
<glob.h>----------------------路径名模式匹配类型
<grp.h> ----------------------组文件
<netdb.h>----------------------网络数据库操作
<pwd.h>----------------------口令文件
<regex.h>----------------------正则表达式
<tar.h> ----------------------tar归档值
<termios.h> ----------------------终端I/O
<unistd.h>----------------------符号常量
<utime.h> ----------------------文件时间
<wordexp.h>----------------------字扩展类型
<arpa/inet.h>----------------------Internet定义
<net/if..h> ----------------------套接字本地接口
<netinet/in.h> ----------------------Internet地址族
<netinet/tcp.h>----------------------传输控制协议定义
<sys/mman.h>----------------------内存管理声明
<sys/select.h>----------------------select函数
<sys/socket.h>----------------------套接字接口
<sys/stat.h> ----------------------文件状态
<sys/times.h> ----------------------进程时间
<sys/types.h> ----------------------基本系统数据类型
<sys/un.h>----------------------UNIX域套接字定义
<sys/utsname.h>----------------------系统名
<sys/wait.h>----------------------进程控制
4、POSIX标准定义的XSI扩展头文件(26项)
<cpio.h> ----------------------cpio归档值
<dlfcn.h>----------------------动态链接
<fmtmsg.h>----------------------消息显示结构
<ftw.h>----------------------文件树漫游
<iconv.h>----------------------代码集转换实用程序
<langinfo.h> ----------------------语言信息常量
<libgen.h> ----------------------模式匹配函数定义
<monetary.h>----------------------货币类型
<ndbm.h>----------------------数据库操作
<nl_types.h>----------------------消息类别
<poll.h> ----------------------轮询函数
<search.h>----------------------搜索表
<strings.h>----------------------字符串操作
<syslog.h>----------------------系统出错日志记录
<ucontext.h>----------------------用户上下文
<ulimit.h>----------------------用户限制
<utmpx.h>----------------------用户帐户数据库
<sys/ipc.h>----------------------IPC
<sys/msg.h>----------------------消息队列
<sys/resource.h>-------------------资源操作
<sys/sem.h>----------------------信号量
<sys/shm.h>----------------------共享存储
<sys/statvfs.h>----------------------文件系统信息
<sys/time.h> ----------------------时间类型
<sys/timeb.h>----------------------附加的日期和时间定义
<sys/uio.h> ----------------------矢量I/O操作
5、POSIX标准定义的可选头文件(8项)
<aio.h>----------------------异步I/O
<mqueue.h> ----------------------消息队列
<pthread.h>----------------------线程
<sched.h> ----------------------执行调度
<semaphore.h>---------------------信号量
<spawn.h> ----------------------实时spawn接口
<stropts.h> ----------------------XSI STREAMS接口
<trace.h>----------------------时间跟踪
6、Linux中的限制分类:
编译时限制(定义在头文件中)
与文件或目录无头的运行时限制(sysconf()获取)
与文件或目录相关的运行时限制(pathconf()和fpathconf()获取)
7、<limits.h>中定义的整型值大小:
8、函数sysconf、pathconf 和 fpathconf
sysconf()中的name 为 _SC_ 开头的常量;pathconf和fpathconf中的name以 _PC_ 开头;如果 name 错误,3个函数都返回-1(errno = EINVAL)
sysconf() 的 name 参数取值:
pathconf()和fpathconf中 name 取值:
限制:
_PC_MAX_CANON 和 _PC_MAX_INPUT 引用的文件必须为终端文件;
_PC_LINK_MAX 和 _PC_TIMESTAMP_PESOLUTION 引用的文件可为文件或目录,当为目录时,返回值用于目录本身;
_PC_FILESIZEBITS 和 _PC_NAME_MAX 引用的必有为目录,返回值用于该目录中的文件名;
_PC_PATH_MAX 引用的必须为目录;
_PC_PIPE_BUF 引用的必须为管道、FIFO或目录;
_PC_SYMLINK_MAX 引用的必须为目录
9、如同对限制的处理,有3种处理选项的方法:
编译时选项定义在<unistd.h>中;
与文件或目录无关的运行时选项用sysconf()判断;
与文件或目录相关的运行时选项用pathconf()或fpathconf()判断;
10、<sys/types.h>中定义的数据类型: