第二章: 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 | 能表示不同的字符码 |