UNIX环境高级编程(第3版)-系统限制

UNIX系统实现定义了很多幻数和常量,使用限制可以确定这些幻数和具体实现定义的限制。

限制分类:

1.编译时限制(基本类型的最大最小值等):一般在头文件中定义,编译时包含头文件;

2.运行时限制(文件名包含字符数等):要求进程调用一个函数获得限制;

为解决某些限制在一个给定的视线中可能是固定的(静态的在头文件中定义),在另一个实现中可能是变动的(需要有一个运行时函数调用),提供了3种限制:

1.编译时限制(头文件)

2.与文件或目录无关的运行时限制(sysconf)

3.与文件或目录有关的运行时限制(pathconf、fpathconf)

若一个特定的运行时限制限制在一个给定的系统上并不改变,可以静态的定义在一个头文件中;

若未将其定义在头文件中,只能调用3个conf函数中一个,确定运行时的值。

ISO C限制

ISO C定义的所有编译时的限制都列在头文件<limits.h>中

image.png

 

POSIX限制

7类限制:

1. 数值限制:LONG_ BIT、SSIZE_ MAX和WORD_ BIT

2. 最小值:25个常量

3. 最大值:_POSIX_CLOCKRES_MIN

4. 运行时可以增加的值: CHARCLASS_NAME_MAX、COLL_WEIGHTS_MAX、LINE_MAX、NGROUPS_MAX和RE_DUP_MAX

5. 运行时不变值(可能不确定-逻辑上无限,意味着该值没有实际上限)

6. 其他不变值 NL_ARGMAX、NL_MSGMAX、NL_SETMAX、NL_TEXTMAX

7. 路径名可变值:FILESIZEBITS、LINK_MAX、MAX_CANON、MAX_INPUT、NAME_MAX、PATH_MAX、PIPE_BUF和SYMLINK_MAX

POSIX.1提供了3个运行时函数(sysconf、pathconf、fpathconf)以供调用,使用时可以在运行时得到实际的实现值

XSI限制

定义了代表实现限制的几个常量:

1. 最小值:5个常量

2. 运行时不变值(可能不确定):IOV_MAX、PAGE_SIZE

sysconf、pathconf、fpathconf函数

#include < unistd. h>

long sysconf( int name);

long pathconf( const char *pathname, int name);

log fpathconf( int fd, int name);

成功返回相应值,出错返回-1;

image.png

image.png

不确定的运行时限制

如果有些限制值没有在头文件中定义,在编译时就不可以使用,但是如果他们的值不是确定的,在运行时它们的值也可能未定义。

1.路径名

为路径名动态分配存储区:

若<limits.h>中未定义常量PATH_MAX,需要调用pathconf。pathconf的返回值是基于工作目录的相对路径名的最大长度,将返回值+ 1作为结果值——SUS明确要求在结尾处加一个终止NULL字节

2.最大打开文件数

使用LONG_MAX作为要关闭的文件上限数,会浪费大量时间,并且没有那么多文件打开;因此设置进程能够打开的文件数并设置上限,可以规避风险;

选项

对每个选项,有3种可能的平台支持状态

1. 如果符号常量没有定义或者定义值为-1,那么该平台在编译时并不支持相应选项。

2. 如果符号常量的定义值大于0,那么该平台支持相应选项。

3. 如果符号常量的定义值为0,则必须调用sysconf、pathconf或fpathconf来判断相应选项是否受到支持

image.png

常用基本数据类型

image.png

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值