Unix环境高级编程学习笔记 第二章 UNIX标准化及实现

第二章 UNIX标准化及实现

  1. UNIX标准化

    1. ANSI C:标准的意图时提供C程序的可移植性
    2. IEEE POSIX(计算机环境的可移植操作系统界面)
    3. X/Open XPG3
    4. FIPS(联邦信息处理标准)
  2. UNIX实现:标准只是界面的规格说明,实施由制造商采用具体实现

    1. SVR4
    2. 4.3+BSD
  3. 限制:用于确定幻数(为常数,但无法确定具体代表与实际意义)与实现定义

    1. 必须的限制功能:

      1. 编译时间选择项(系统是否支持作业控制)
      2. 编译时间限制(短值型的最大值是什么)
      3. 运行时间限制(文件名的最大字符数是多少)
    2. 由于限制在一个给定的实现中可能是固定的,另一个实现上可能是变动的,解决以上问题提供三种限制:

      1. 编辑时间选择项及限制(头文件)
      2. 不与文件或目录相关联的运行时间限制
      3. 与文件或目录相关联的运行时间限制
    3. ANSI C限制:编译时间限制

      <limits.h>中定义了C标准限制;区分带符号与不带符号的字符值;<float.h>中定义浮点数据;<stdio.h>定义FOPEN_MAX即可同时打开的标准I/O流的最小数
      请添加图片描述

    4. POSIX限制:POSIX.1定义了很多设计操作系统实现限制的常数,包括33个限制和常数分为八类;其中15个必须定义;但是13个不变最小值对于程序太小;

    5. XPG3限制:7个常数

    6. 运行时间限制由sysconf、pathconf和fpathconf函数调用取得,其中pathconf的参数pathname和fpathconf残烛filedes由很多限制,若不满足则结果未定义

    请添加图片描述

    1. FIPS 151-1要求:

      要求下列POSIX.1可选功能:_POSIX_JOB_CONTROL, _POSIX_SAVED_IDS, POSIX NO_TRUNC, POSIX_CHOWN_RESTRICTED和POSIX_VDISABLE。
      • NGROUPS_MAX的最小值是8。
      • 新创建的文件或目录的组ID应设置为它所在目录的组ID。
      • 已传输了一些数据后,若read或write被一个捕捉到的信号所中断,则这些函数应返回已被传输的字节数。
      • 登录shell应定义环境变量HOME和LOGNAME。

    2. 总结:_SC_开始的为sysconf的参数,_PC_为其余的参数

      请添加图片描述
      请添加图片描述

    3. 未确定的运行时间限制:

      第三列标记为可选的值为未确定的。头文件中未定义则编译时不能使用,但若值未确定,在运行时可能也未定义

      1. 路径名

        程序需要为路径名分配存储器,编译时通常分配并使用幻数为数组长度或BUFSIZ。POSIX.1使用PATH_MAX,但如果此值不确定则无用处。使用PATH_MAX时若在<limits.h>中定义了常数,便可用,否则需调用pathconf,因为pathconf的返回值把第一个参数视为基于工作目录的相对路径名,并将其加1作为结果值。

      2. 最大打开文件数

  4. 功能测试宏

    在编译程序时,若想只使用POSIX定义,需定义常数_POSIX_SOURCE。_POSIX_SOURCE便是功能测试宏。

    功能测试宏包括:_POSIX_SOURCE;_XOPEN_SOURCE;STDC(符合ANSI C标准)

    使用方法:

    1. cc命令行:cc -D_POSIX_SOURCE file.c

    2. 源文件中第一行:#define _POSIX_SOURCE 1

    3. 文件中:

      #ifdef _STDC_    //判断是否ANSI C编译
      void *myfunc (const char *);
      #else
      void *myfunc();
      #endif
      
  5. 基本系统数据类型

    在<sys/types.h>中定义了与实现有关的数据类型,成为基本系统数据类型。
    请添加图片描述

  6. 标准之间的冲突:略

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值