博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《UNIX环境高级编程》---2 UNIX标准及实现
阅读量:4185 次
发布时间:2019-05-26

本文共 1501 字,大约阅读时间需要 5 分钟。

UNIX 标准及实现

UNIX 标准

  1. ISO C:意图是提供C程序的可移植性,使得它能够适合于大量不同的操作系统。

    • 该标准不仅定义了C程序设计语言的语法和语义,还定义了标准库
  2. POSIX(Portable Operating System Interface): 指的是可移植操作系统接口。该标准的目的是提升应用程序在各种UNIX系统环境之间的可移植性。它定义了“符合POSIX”的操作系统必须提供的各种服务。

    • POSIX 包含了 ISO C 标准库函数
  3. SUS(Single Unix Specification):是 POSIX 标准的一个超集,他定义了一些附加接口扩展了 POSIX 规范提供的功能。

  4. 上述三个标准只是定义了接口的规范,而具体的实现由厂商来完成。目前UNIX主要有以下实现:

    • SVR4(UNIX System V Release 4)
    • 4.4 BSD(Berkeley Software Distribution)
    • FreeBSD
    • Linux
    • Mac OS X
    • Solaris

限制

  1. UNIX 系统实现定义了很多幻数和常量。有两种类型的限制是必须的:

    • 编译时限制,如 short int 最大值是多少
    • 运行时限制,如文件名最长多少个字符
  2. 通常编译时限制可以在头文件中定义;运行时限制则要求进程调用一个函数获得限制值。

  3. 某些限制在一个给定的 UNIX 实现中可能是固定的(由头文件定义),在另一个 UNIX 实现中可能是动态的(需要由进程调用一个函数获得限制值)。如文件名的最大字符数在不同的操作系统中,是属于动态/静态限制。因此提供了三种限制:

    • 编译时限制(由头文件给定)
    • 与文件或者目录无关的运行时限制(由 sysconf函数给定)
    • 与文件或者目录相关的运行时限制(由 pathconf函数以及fpathconf函数给定)
  4. ISO C 限制:ISO C 所有编译时限制都在头文件 <limits.h> 中,如整型大小。

    • 这些限制常量在一个给定的操作系统中不会改变
    • 关于浮点数的最大最小值的编译时限制,在<float.h>头文件中定义
    • <stdio.h> 头文件还定义了三个编译时限制:
      • FOPEN_MAX:可同时打开的标准I/O 流限制的最小数
      • TMP_MAX:由tmpnam函数产生的唯一文件名的最大个数
      • FILENAME_MAX:虽然 ISO C 定义了该常量,但是要避免使用。而要用 POSIX 提供的 NAME_MAXPATH_MAX 常量
  5. POSIX 限制:POSIX定义了很多涉及操作系统实现限制的常量。这些常量大多数在<limits.h>中,也有的按照具体条件定义在其他头文件中

  6. 获取运行时限制:

    #include
    long sysconf(int name); long pathconf(const char*pathname,int name);long fpathconf(int fd,int name); //fd 为文件描述符
    • 参数:
      • name:指定的限制值。name参数是系统定义的常量
        • _SC_开头的常量用于 sysconf函数
        • -PC_开头的常量用于pathconffpathconf函数
      • pathname:文件名
      • fd:打开文件的文件描述符
    • 返回值:
      • 成功:返回对应的限制值
      • 失败: 返回 -1

    这三个函数失败的情况:

    • name参数并不是一个合适的常量,则这三个函数返回-1,并将 errno设置为 EINVAL
    • 有些name会返回一个不确定的值,这通过返回 -1 来体现,同时不改变errno

转载地址:http://ppdoi.baihongyu.com/

你可能感兴趣的文章
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Ubuntu Navicat for MySQL安装以及破解方案
查看>>
在C++中如何实现模板函数的外部调用
查看>>
HTML5学习之——HTML 5 应用程序缓存
查看>>
HTML5学习之——HTML 5 服务器发送事件
查看>>
SVG学习之——HTML 页面中的 SVG
查看>>
mysql中用命令行复制表结构的方法
查看>>
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
kermit的安装和配置
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
商务智能-基本方法-数据钻取
查看>>
openstack ice resize 详解(三)
查看>>
事务与锁(转)
查看>>
Namenode HA原理详解(脑裂)
查看>>