• UNIX环境高级编程 第2章 UNIX标准及实现


    在过去的将近25年时间,人们为了UNIX的标准化做出了种种努力,这使得程序在不同版本的UNIX系统之间的移植相当容易。

    ISO C

    1989年,C语言首个标准得到批准,其为C89。次年,一个带有小改动的版本标准被批准其为C90。因此,C89和C90通常指同一种语言。在2000年三月,ANSI采纳了ISO/IEC 9899:1999标准。这个标准通常指C99。在2011年12月,ANSI采纳了ISO/IEC 9899:2011标准。这个标准通常即C11,它是C程序语言的现行标准。

    按照ISO C标准定义的头文件将C语言公用函数库划分成了24个部分。POSIX.1标准包括这些头文件以及一些额外的头文件。

    IEEE POSIX

    POSIX是由IEEE制订的一系列标准,其指的是可移植操作系统接口,它说明的是接口而不是实现。

    Single UNIX Specification

    Single UNIX Specification简称SUS,它是POSIX.1标准的一个超集。

    UNIX系统实现

    ISO C、IEEE POSIX、Single UNIX Specification是三个不同的组织,第一个组织负责对C语言进行标准化,后两个组织负责对UNIX系统接口进行标准化。这三个组织制定了概念上的规范,但实现是由厂商进行的。几个知名实现发行版如下:

    • SVR4:AT&T实现
    • BSD:加州大学伯克利分校实现
    • FreeBSD:FreeBSD志愿者
    • Linux:Minix改写而来,志愿者维护
    • Mac OS X:Apple公司
    • Solaris:SUN公司

    UNIX系统中既有编译器的限制,又有UNIX实现(与编译程序无关)有关的限制。这两种限制有交集部分,也有差集部分,比如int类型的字节长度,和编译器有关,和UNIX系统无关,但通常编译器会参考操作系统的实现来决定。而程序能打开文件描述符的数量和UNIX实现有关,而和编译器无关。对于操作系统的种种限制,UNIX系统提供了3个库函数来查看。其头文件及函数原型如下:

    #include <unistd.h>
    
    long int sysconf (int name);
    long int pathconf (const char* path, int name);
    long int fpathconf (int fd, int name);

    对于上述3个函数,成功时返回相应值,失败则返回-1。对于pathconf( )、fpathconf( )函数来说,第一个参数并不是总是有意义的,当需要查询一个文件的链接数时,第一个参数总是需要的,当查询系统的文件名长度限制时,第一个参数是无意义的,只要不为空即可。

    上图的宏为sysconf( )函数的,不能在pathconf( )、fpathconf( )函数中使用。

    下图的宏为pathconf( )、fpathconf( )函数的,不能在sysconf( )函数中使用。

    需要说明的是,sysconf( )函数和pathconf( )、fpathconf( )函数的参数是不一样的,虽然它们的参数都是一些宏,但不能混用。正是由于参数是使用宏实现的,其宏的值可能会重合,导致三个函数之间的部分宏混用时部分能成功,从而导致误以为宏是通用的。例如在fpathconf( )函数中使用 _SC_SEM_NSEMS_MAX 宏就会出错,但在sysconf( )函数中使用 _PC_NAME_MAX 宏却正常,这可能是因为宏查找替换之后,宏的实际值碰巧吻合有效。

  • 相关阅读:
    Python linux 下安装Python requests包出错:[Errno 14] PYCURL ERROR 22
    Python 缺少requests模块,报错 ImportError: No module named requests
    Python eval()函数的用法
    Python 判断目录或文件是否存在
    Python 去重csv文件中相同的重复行
    python 合并两个csv文件
    2-3-配置DHCP服务器实现动态地址分配
    2-2-rsync 数据备份
    2-1-搭建Linux实验环境-sshd服务搭建与管理与防治暴力破解-课堂笔记
    Software Quality Assurance Framework(3)
  • 原文地址:https://www.cnblogs.com/pluse/p/6794902.html
Copyright © 2020-2023  润新知