当前位置:嗨网首页>书籍在线阅读

01-系统限制和选项

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

第11章 系统限制和选项

但凡UNIX实现,无不对各种系统特性和资源加以限制,并提供(或者选择不提供)由各种标准所定义的选项,例如:

  • 一个进程能同时拥有多少已打开的文件?
  • 系统是否支持实时信号?
  • int类型变量可存储的最大值是多少?
  • 一个程序的参数列表能有多大?
  • 路径名的最大长度是多少?

尽管可以把假定的限制和选项硬性写入程序编码,但这将破坏程序的可移植性,因为限制和选项可能会有所不同。

  • 在UNIX实现之间:虽然限制和选项在某个特定UNIX实现中可能是固定的,但在不同的UNIX实现之间,可能会有所不同。int变量可存储的最大值就是此类限制的例子之一。
  • 特定实现的运行环境:例如,可能重新配置了内核,改变了某个限制。又或者,在某个系统上编译的应用程序,却在另一个限制和选项有所不同的系统中运行。
  • 从一个文件系统到另外一个文件系统:例如,传统的System V文件系统允许文件名长达14个字节,而传统的BSD文件系统和大多数“原生”Linux文件系统则允许文件名高达255个字节。

因为系统限制和选项会影响应用程序的行为,所以可移植应用程序需要获取限制值,弄清系统对选项的支持情况。C语言标准和SUSv3为此而提供了两种重要途径。

  • 在编译程序时能够获得一些限制和选项。例如,int类型的最大值取决于硬件结构和编译器的设计选择。此类限制可在头文件中记录。
  • 另外一些限制和选项在程序运行时可能会有变化。对此,SUSv3定义了3个函数sysconf()、pathconf()和fpathconf(),供应用程序调用以检查系统实现的限制和选项。

SUSv3规定有一系列限制,要求符合规范的实现必须支持,同时还规定了一套选项,特定系统可以有选择地对其中各个选项予以支持。本章介绍了部分限制和选项,其余则会在后续章节中适时加以描述。