第二章: UNIX 标准及实现
主要介绍了标准头文件, 拓展头文件, 一些限制,还有选项与一些基本系统数据类型.
UNIX 标准及实现
UNIX 标准化过程
UNIX 标准化基于:
ISO C 提供 C 程序的可移植性
IEEE POSIX 可移植操作系统接口
附 1.
ISO C 标准定义的头文件
| 头文件 | 说明 |
|---|---|
| <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> | 宽字符分类和映射支持 |
POSIX 标准定义的必需头文件
| 头文件 | 说明 |
|---|---|
| <aio.h> | 异步 I/O |
| <cpio.h> | cpio 归档值 |
| <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> | 进程控制 |
POSIX 还包括一些可选部分,因为各个版本的可选部分不尽相同, 笔者在这里先不做考证,并不将这些记录下来, 待来日有时间再来考证.
TODO:
- POSIX 标准定义的XSI 可选头文件
- POSIX 标准定义的可选头文件
- POSIX.1 标准定义的可选头文件
PS: XSI X/Open 系统接口(X/Open SystemInterface)
限制
为了增强程序的可移植性, UNIX会存在一些幻术,和常量.相应的,也存在对这些实现的限制.限制可以分为两类:
- 编译时限制 短整形的最大值
- 运行时限制 文件名有多少个字符
一些限制:
| 名称 | 描述 | 最小可接受值 | 典型值 |
| NL_ARGMAX | printf和scanf调用数字的最大值 | 9 | 9 |
| NL_LANGMAX | LANG环境变量的最大字节数 | 14 | 14 |
| NL_MSGMAX | 最大消息数量 | 32,767 | 32,767 |
| NL_NMAX | 多对一映射字符的最大字节数 | 未定义 | 1 |
| NL_SETMAX | 最大集合数量 | 255 | 255 |
| NL_TEXTMAX | 消息字符串的最大字节数 | POSIX2_LINE_MAX | 2,048 |
| NZERO | 默认的进程优先级 | 20 | 20 |
| XOPEN_IOV_MAX | readv和writev使用的iovec结构的最大数量 | 16 | 16 |
| XOPEN_NAME_MAX | 文件名的最大字节数 | 255 | 255 |
| XOPEN_PATH_MAX | 路径名的最大字节数 | 1,024 | 1,024 |
ISO C 限制
后续还有些限制, 因为精力有限 且又因发现了一个比较好的博客, 读者具体可以参照这个博客.
参考博客:
基本数据类型
一些常用的数据类型
| 类型 | 说明 |
|---|---|
| clock_t | 时钟滴答计数器(进程时间) |
| comp_t | 压缩的时钟滴答 |
| dev_t | 设备号 |
| fd_set | 文件描述符集 |
| fpos_t | 文件位置 |
| gid_t | 数组值ID |
| ino_t | i节点编号 |
| mode_t | 文件类型,文件创建模式 |
| nlink_t | 目录项的链接计数 |
| off_t | 文件长度和偏移量(带符号的) |
| pid_t | 进程ID和进程组ID(带符号的) |
| pthread_t | 线程ID |
| ptrdiff_t | 两个指针相减的结果(带符号的) |
| rlim_t | 资源限制 |
| sig_atomic_t | 能原子性的访问的数据类型 |
| sigset_t | 信号集 |
| size_t | 对象(如字符串)长度(不带符号的) |
| ssize_t | 返回字节计数的函数(带符号的) |
| time_t | 日历时间的秒计数器 |
| uid_t | 数值用户ID |
| wchar_t | 能表示不同的字符码 |