UNIX环境高级编程读书笔记(二)

第二章: 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:

  1. POSIX 标准定义的XSI 可选头文件
  2. POSIX 标准定义的可选头文件
  3. POSIX.1 标准定义的可选头文件

PS: XSI X/Open 系统接口(X/Open SystemInterface)

限制

为了增强程序的可移植性, UNIX会存在一些幻术,和常量.相应的,也存在对这些实现的限制.限制可以分为两类:

  1. 编译时限制 短整形的最大值
  2. 运行时限制 文件名有多少个字符

一些限制:















































名称
描述
最小可接受值
典型值
NL_ARGMAXprintf和scanf调用数字的最大值99
NL_LANGMAXLANG环境变量的最大字节数1414
NL_MSGMAX最大消息数量32,76732,767
NL_NMAX多对一映射字符的最大字节数未定义1
NL_SETMAX最大集合数量255255
NL_TEXTMAX消息字符串的最大字节数POSIX2_LINE_MAX2,048
NZERO默认的进程优先级2020
XOPEN_IOV_MAXreadv和writev使用的iovec结构的最大数量1616
XOPEN_NAME_MAX文件名的最大字节数255255
XOPEN_PATH_MAX路径名的最大字节数1,0241,024

ISO C 限制

后续还有些限制, 因为精力有限 且又因发现了一个比较好的博客, 读者具体可以参照这个博客.

参考博客:

UNIX标准化及实现

基本数据类型

一些常用的数据类型

类型 说明
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 能表示不同的字符码