UINIX 高级环境编程杂项之限制

unix操作系统定义了许多常量和幻数,代码在不同平台间移植的时候,可以通过一些已有的技术确定这些常量和幻数的值。

限制的分类:
(1)编译时限制
举栗子:例如 short 类型在编译时应该占多少个字节,这在编译时必须确定。如果在linux 下定义short 变量时,就应该遵循POSIX标准,其中限制了short 应该占多少个字节,或者给出了实现应该遵循的一个范围标准。
(2)运行时限制
举栗子:程序在运行时限制内存的占用量、限制CPU的核数(这些都是对资源的限制)。这些限制只有在程序跑起来时才能确定。

怎么理解确定文件名是一个运行时限制?
文件名的最大长度取决于文件系统,同一个操作系统写可能有多个文件系统,在文件系统A下的文件的最大文件名限制和在文件系统B下的最大文件名长度的限制不同。因此在跑程序时,要确定文件存在于哪个文件系统,才知道其最大文件名长度的限制。 是不是可以这样理解?

获取编译时限制:实现可以在在头文件中定义需要施加的编译时限制。因此可以在头文件中获取。
获取运行时限制:
与文件和目录有关的运行时限制:
采用sysconf 获取
与文件和目录无关的运行时限制:
采用pathconf 和 fpathconf获取。

一个运行时限制,在一个给定的系统上,该限制是固定不变的话,那么可以将这样的运行时限制也写到头文件中。但是虽然可以写到头文件中,如果实现并没有写的话,那么还是需要通过调用上述3个conf函数来获取限制信息。

ISO C限制 给出的是各种数据类型的可接受的最小值。 POSIX在其基础上进行了扩充,规定:
INT_MIN :2147483647
INT_MAX:-2147483647
UINT_MAX:4294967295

POSIX要求char类型占8个字节,因此:
CHAR_BIT:8
SCHAR_MIN:-128
SCHAR_MAX:127
UCHAR_MAX:255

ISO C 中限制同时可以打开标准IO流的最小值的限制为:FOPEN_MAX = 8(在Linux 3.2.0 的实际实现为 16)
POSIX 中限制同时可以打开标准IO流的最小值的限制为: STREAM 此时也应该兼容ISO C的标准。

ISO C 定义了 FILENAME_MAX
POSIX 定了其替代常量:NAME_MAX PATH_MAX

也就是说ISO C 只是给出了一个限制的约束范围,具体限制的值是多少由具体实现取决定。

POSIX 限制:

基本POSIX接口部分的限制:

(1)数值限制3个
(2)最小值25个常量
(3)最大值 1个
(4)运行时可以增加的值 5个
(5)运行时不变的值 24个常量
(6)其他不变值4个
(7)路径名可变值 8个

这些限制和常量,某些定义在<limits.h>中,某些可按具体条件可定义、可不定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值