您的位置:首页 > 运维架构 > Linux

UNIX/Linux 系统实现限制

2016-07-03 10:41 253 查看

1. 操作系统实现限制

标准定义了操作系统在实现时的限制

规定某些最大值最小(至少)是多少,实际实现中可以更大,严格符合此标准的应用则应小于这个最小值

规定某些最小值最大(最多)是多少,实际实现中可以更小,严格符合此标准的应用则应大于这个最大值

即实际的实现范围应比标准规定的范围更广,这样可以满足更大的需求

即严格符合标准的应用应在标准规定的范围内,这样比较具有可移植性

标准定义的限制值往往加了 _POSIX_ 或 _XOPEN_ 前缀,系统的具体实现值去掉这些前缀,获取限制值时函数中限制值名称参数再加上 _SC_ 或_PC_ 前缀

2. 限制的种类

1. 编译时限制

在头文件中定义

例如,短整型的最大值是什么

2. 运行时限制

要求进程调用相关函数来获得限制值

例如,文件名最多多少个字符(依赖于运行的文件系统)

1. 操作系统相关的运行时限制

sysconf 函数

2. 文件系统相关的运行时限制

pathconf 函数

fpathconf 函数

例如,文件名有多少个字符

3. ISO C 限制

所有编译时限制都列在limits.h 中

整型值的编译时限制列在 limits.h 中

浮点数的限制列在 float.h 中

文件相关的限制

文件相关限制举例

限制包含文件含义
FOPEN_MAXstdio.h可以同时打开的标准 I/O 流的最小个数
TMP_MAXstdio.h由 tmpnam 函数产生的唯一文件名的最大个数
FILENAME_MAX

4. POSIX 限制

文件相关限制举例

限制包含文件含义
STREAM_MAX同 FOPEN_MAX
NAME_MAX替代 FILENAME_MAX
PATH_MAX替代 FILENAME_MAX

1. 编译时限制分类(常量)

1. 数值限制

LONG_BIT, SSIZE_MAX 和 WORD_BIT

2. 最小值

在 limits.h 中定义了25个可接受最小值的常量

_POSIX_OPEN_MAX

_POSIX_PATH_MAX

实现值为去掉_POSIX_前缀

3. 最大值

_POSIX_CLOCKERS_MIN

2. 运行时限制分类(函数调用)

1. 运行时可增加值

CHARCLASS_NAME_MAX

COLL_WEIGHTS_MAX

LINE_MAX

NGROUPS_MAX

RE_DUP_MAX

2. 运行时不变值(可能不确定)

可能定义在给定系统的头文件中,也可能需要调用函数

ARG_MAX

ATEXIT_MAX

在 limits.h 中定义了17个常量

3. 其他不变值

NL_ARGMAX

NL_MSGMAX

NL_SETMAX

NL_TEXTMAX

4. 路径名可变值

即在不同的路径下,限制值是不同的

FILESIZEBITS

LINK_MAX

MAX_CANON

MAX_INPUT

NAME_MAX

PATH_MAX

PIPE_BUF

SYMLINK_MAX

5. XSI 限制

1. 最小值

NL_LANGMAX

NZERO

_XOPEN_IOV_MAX

_XOPEN_NAME_MAX

_XOPEN_PATH_MAX

在 limits.h 中定义

2. 运行时不变值

IOV_MAX

PAGE_SIZE5

6. 获取运行时限制的实现值

1. 操作系统相关的运行时限制

#include <unistd.h>
long sysconf(int name);


name 参数以
_SC_
开头

2. 文件系统相关的运行时限制

#include <unistd.h>
long pathconf(const char *pathname, int name);
long fpathconf(int fd, int name);


name 参数以
_PC_
开头

3. 限制文件

pathconf.sym

sysconfig.sym

这两个文件包含了用制表符分隔的限制名和符号列表(即实现值,用幻数表示)

7. 不确定的运行时限制

对于编译时限制,这些限制值可能没有在头文件中定义

对于运行时限制,这些限制值可能是未定义的

例如

路径名最大长度

最大打开文件数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息