首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

2.6 选项

表2-5中列出了POSIX.1的选项,并在2.2.3节中讨论了XSI选项组。如果我们要编写一些可移植的应用程序而这些程序与所有得到支持的选项有关,那么就需要一种可移植的方法以决定一种实现是否支持一个给定的选项。

如同对限制的处理(见2.5节)一样,Single UNIX Specification定义了三种处理方法:

(1) 编译时选项定义在<unistd.h>中。

(2) 与文件或目录无关的选项用sysconf函数确定。

(3) 与文件或目录有关的选项通过调用pathconf或fpathconf函数来发现。

选项包括列在表2-5的第3列中的符号,以及列在表2-13和表2-14中的符号。如若符号常量未定义,则必须使用sysconf、pathconf或fpathconf以决定该选项是否受到支持。在这种情况下,这些函数的name参数前缀_POSIX必须替换为_SC或_PC。对于以_XOPEN为前缀的常量,则在构成name参数时必须在其前放置_SC或_PC字符串。例如,若常量_POSIX_ THREADS是未定义的,那么就可以将name参数设置为_SC_THREADS,并以此调用sysconf以确定该平台是否支持POSIX线程选项。如若常量_XOPEN_UNIX是未定义的,那么就可以通过将name参数设置为_SC_XOPEN_UNIX,来调用sysconf以确定该平台是否支持XSI扩展。

如果该平台定义了符号常量,则有以下三种可能:

(1) 如果符号常量的定义值为-1,那么该平台不支持相应的选项。

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

(3) 如果符号常量的定义值为0,则必须调用sysconf、pathconf或fpathconf以确定相应的选项是否受到支持。

除表2-5中已列出的那些选项之外,表2-13还总结了另外一些选项以及它们的符号常量,sysconf可以使用这些符号常量。

表2-14中总结了pathconf和fpathconf使用的符号常量。如同系统限制一样,关于sysconf、pathconf和fpathconf如何处理选项,有如下几点值得注意:

        (1) _SC_VERSION的返回值表示与该标准相关的年(以4位数表示)和月(以2位数表示)。该值可能是198808L、199009L、199506L,或者表示该标准后续版本的其他值,与SUS v3相关的值是200112L 。

        (2) _SC_XOPEN_VERSION的返回值表示该系统遵循的XSI版本。与SUS v3相关联的值是600。

         (3) _SC_JOB_CONTROL、SC_SAVED_IDS以及_PC_VDISABLE的值不再表示可选功能。从SUS v3起,不再需要这些功能,但这些符号仍然被保留,以便向后兼容。

         (4) 如果所指定的pathname或filedes不支持此功能,那么_PC_CHOWN_RESTRICTED和_PC_NO_TRUNC返回-1,而不会改变errno。

        (5) _PC_CHOWN_RESTRICTED引用的文件必须是文件或者目录。如果是目录,那么返回值指明该选项是否可应用于该目录中的各个文件。

         (6) _PC_NO_TRUNC引用的文件必须是一个目录。其返回值可用于该目录中的各文件名。

         (7) _PC_VDISABLE引用的文件必须是一个终端文件。

表2-15中列出了若干配置选项以及它们在本书所讨论的四个示例系统上的对应值。应该注意的是,有几个系统还没有跟上Single UNIX Specification的最新版本。例如,MAC OS X 10.3 支持POSIX线程,但将_POSIX_THREADS定义为

 

它没有指定一个值。为了遵循SUS v3,如若定义了该符号,那么其值应该设置为0、-1或200112 。

如果未定义一个功能,也就是该系统未定义符号常量或对应的_SC或_PC名字,则将相关记录项标记为“未定义”。与此相对照,“已定义”记录项表示该符号常量已定义,但未指定值,前面的_POSIX_THREADS例子显示了这一点。如若系统定义了符号常量,但其值为-1或为0,54 但相应的sysconf或pathconf调用返回-1,那么该记录项将被标记为“不被支持”。注意,当用于Solaris PCFS文件系统中的文件时,对于_PC_NO_TRUNC,pathconf返回值-1。PCFS系统支持DOS软盘格式,DOS文件名按DOS文件系统所要求的8.3格式截断,在进行此种操作时并无任何提示。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论