zoukankan      html  css  js  c++  java
  • UNIX标准

    背景

    人们在UNIX编程环境和C 程序设计语言的标准化方面已经做了很多工作。虽然UNIX应用程序在不同的UNIX操作系统版本之间进行移植相当容易,但是2 0 世 纪 80年代UNIX版本种类

    的剧增以及它们之间差别的扩大,导致很多大用户( 如美国政府)呼吁对其进行标准化。

    对于我们程序员来说,了解基本的标准和背景是有必要,本文主要对ISO C    POSIX    Sigle UNIX Specification 3个标准进行说明

     

    ISO C

    1989年,c程序设计语言的ANSI的标准X3.159-1989得到批准。ISO C的标准诞生,ISOC的标准意图是提供C程序的可移植性,使他能适合于不同的操作系统,而不仅仅是UNIX系统。

    1999 年C标准被更新,这也是我常常说c99标准,它显著改善进行数值处理的应用软件的支持,同时加入了restrict关键字,这个我们常用的 const volatile修饰意外的第三关键字。

    restrict,C语言中的一种类型限定符(Type Qualifiers),用于告诉编译器,对象已经被指针所引用,不能通过除该指针外所有其他直接或间接的方式修改该对象的内容。(可以参考百度百科的例子)

    2011年C标准再次更新,由于其他的一些标准没有完全更新,C99还是目前用的最广泛的标准。

    ISO C库可分为24个区

    以前一直纠结的bool型变量的头文件在stdbool.h,哈哈。ISO C的头文件依赖操作系统所配置的C的编译器版本的

    IEEE POSIX

    posix指的是可移植的操作系统接口(portable Operating System Interface)。例如我们在进行网络编程的时候使用的套接字就是符合POSIX标准的,不同的UNIX的系统的socket编程肯定是兼容的,对应其他的

    符合POSIX标准的系统也是适用的。

    该标准最初由 IEEE 开发的标准族,部分已经被 ISO 接受为国际标准。该标准的具体内容 见 1.1.3。POSIX.1 和 POSIX.2 分别定义了 POSIX 兼容操作系统的 C 语言系统接口 以及 shell 和工具标准。这两个标准是通常提到的标准。

    电气和电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE) 最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。

    然而,POSIX 并不局限于 UNIX。 许多其它的操作系统,例如 DEC OpenVMS 和 Microsoft Windows NT,都支持 POSIX 标准,尤其是 IEEE Std. 1003.1-1990(1995 年修订)

     POSIX.1,POSIX.1提供了源代码级别的 C 语言应用编程 接口(API)给操作系统的服务程序,例如读写文件。POSIX.1 已经被国际标准化组织(International Standards Organization,ISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。

    图2-2 图2-3 图2-4总结了POSIX。1指定的必要的和可选的头文件

     

      Single UNIX Specification

    Single UNIX Specification ( 单一UNIX规范 ) 是一组用来定义可以称为"UNIX"的计算机操作系统的标准的集合。

    Single UNIX Specification是基于IEEE(电气和电子工程师协会)和The Open Group的工作,由Austin Group发展和维护

    Single UNIX Specification是POSIX.1标准的超集,定义了一些附加的接口,这些接口扩展了基本的POSIX.1规范的功能。相应的系统接口全集被称为X/Open系统接口(XSI,X/Open System Interface)。

    XSI还定义了实现必须支持的POSIX.1的哪些可选部分才能认为是遵循XSI的。它们包括文件同步,存储映射文件,存储保护及线程接口。只有遵循XSI的实现才能称为UNIX操作系统。

     UNIX基本数据类型

     在头文件<sys/types,h>,这个非常重要,在我们编写Linux程序的时候会经常看到用到,掌握他们是基本的要求

     1. clock_t  时钟滴答计数器在我的上一篇博客的进程时间就是用它保存的

    2.comp_t 压缩时钟类型

    3. dev_t 设备号

    4. fd_set 文件描述符集

    5. fpos_t 文件的位置

    6. gid_t 组id

    7. ino_t i节点编号(文件的i节点)

    8.mode_t 文件的类型,文件创建的模式

    9.nlink_t 目录项的连接计数

    10.off_t 文件的偏移量

    11. pid_t 进程id和进程组id

    12 pthread_t 线程id

    13 ptrdiff_t 2指针相减的结果

    14 rlim_t 资源限制

    15 sig_atomic_t 能原子性的访问的数据类型

    16 sigset_t 信号集

    17 size_t 长度个数无符号的

    18 ssizet_t 长度有符号的

    19 time_t 上一篇博客提到的日历时间

    20 uid_t 用户id

    21 wchar_t 能表示所有不同的字符吗

     (2天一更新UNIX的环境编程)

  • 相关阅读:
    windows 下安装MongoDB
    vue.js环境在window和linux安装
    python3的hashlib库sha256、pbkdf2_hmac、blake2b基本用法
    Locust 接口性能测试
    PyTestReport自动化报告使用说明
    Google开发者F12工具面板-network详解
    AppScan基础使用
    pip下载速度慢解决方法
    pycharm工具设置py模板
    jmeter实操及性能测试基础知识整理
  • 原文地址:https://www.cnblogs.com/smartxuchao/p/6662114.html
Copyright © 2011-2022 走看看