背景

人们在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 和工具标准。这两个标准是通常提到的标准。POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX 是为了读音更 像 UNIX)。电气和电子工程师协会(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 能表示所有不同的字符吗

UNIX标准的更多相关文章

  1. UNIX标准及实现

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

  2. linux文件锁的应用,POSIX,unix标准,linux标准

    1. perl,flock加锁.java也能加锁. 2. 先创建文件并打开,才能加锁(写打开?). 3. 可以用于判断进程是否一直在运行(用另一进程判断),如果锁一直在,则进程在:锁不在,则原进程或意 ...

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

    在过去的将近25年时间,人们为了UNIX的标准化做出了种种努力,这使得程序在不同版本的UNIX系统之间的移植相当容易. ISO C 1989年,C语言首个标准得到批准,其为C89.次年,一个带有小改动 ...

  4. UNIX标准C - socket套接字

    一.计算机网络 1.计算机网络的功能 a.数据通信 b.资源共享 c.提高系统的可靠性 d.分布式网络处理和负载均匀. 2.计算机网络的组成 1.通信子网:由网卡.线缆.集线器.中继器.交换器.路由器 ...

  5. UNIX标准C - 进程之间的通信

    一.基本概念 进程间通信IPC:进程之间交换数据的过程叫进程间通信 进程间同性的方式: 简单的进程间的通信: 命令行:父进程通过exec函数创建子进程是可以附加一些数据 环境变量表:父进程通过exec ...

  6. 《UNIX环境高级编程》笔记——2.标准和实现

    随着UNIX各种衍生版本不断发展壮大,标准化工作就十分必要.其实干啥事都是这样,玩的人多了,必须进行标准化. 一.UNIX标准 1.1 ISO C(ANSI C) ANSI:Amerocan Nato ...

  7. 【笔记】Unix 平台标准

    POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEE ...

  8. UNIX环境高级编程——标准I/O库函数和Unbuffered I/O函数

    以写文件为例,C标准I/O库函数(printf(3) .putchar(3) .fputs(3) )与系统调用write(2) 的关 系如下图所示. 库函数与系统调用的层次关系 open .read ...

  9. C标准I/O库函数与Unbuffered I/O函数

    一.C标准I/O库函数.Unbuffered I/O函数 1. C标准I/O库函数是如何用系统调用的 fopen(3) 调用open(2)打开制定的文件,返回一个文件描述符(一个int类型的编号),分 ...

随机推荐

  1. Java Properties类源码分析

    一.Properties类介绍 java.util.Properties继承自java.util.Hashtable,从jdk1.1版本开始,Properties的实现基本上就没有什么大的变动.从ht ...

  2. Memcached服务安装

    安装Memcached服务 memcache分为服务端和客户端程序 服务端程序用来支持存储k-v值,程序名称memcached 客户端与服务端通信,进行存取值(常用的如php的memcache扩展,m ...

  3. BZOJ 3402: [Usaco2009 Open]Hide and Seek 捉迷藏(最短路)

    这个= =一看就是最短路了= = PS:最近有点懒 = = 刚才看到一道平衡树的裸题还嫌懒不去写= =算了等刷完这堆水题再去理= = CODE: #include<cstdio>#incl ...

  4. OpenCv 2.4.9 (二) 核心函数

    前言 经过前面一节的怎样读取图片,我们可以做一些有趣的图像变换,下面我们首先介绍使用遍历的方法实现,然后我们使用内置的函数实现. 矩阵掩码实现 矩阵掩码,和卷积神经网络中的卷积类似.一个例子如下: 现 ...

  5. Python字典详解

    转载请注明出处 Python字典(dict)是一个很常用的复合类型,其它常用符合类型有:数组(array).元组(touple)和集合(set).字典是一个key/value的集合,key可以是任意可 ...

  6. Couchbase 中的分布式储存

    Couchbase 是一个具有高性能.可扩展性和可 用性强的数据库引擎.它可以让开发人员通过 NoSQL 的键值存储(二进制或者JSON)或者使用 N1QL 的形式对数据进行操作(N1QL 是非常类似 ...

  7. 【曝】苹果应用商店逾千款iOS应用存安全漏洞

    据国外网站Ibtimes报道,知名网络安全公司FireEye日前警告称,由于一款名为“JSPatch”.可帮助开发者修改应用程序的软件上存在安全漏洞,导致苹果应用商店内1000多款使用了该框架的iOS ...

  8. mvc4中的过滤器

    过滤器(Filter)把附加逻辑注入到MVC框架的请求处理.实现了交叉关注. 交叉关注:用于整个应用程序,又不适合放在某个局部位置的功能. 过滤器是.NET的注解属性(Attribute),它们对请求 ...

  9. BigInteger和BigDecimal的练习

    前言: BigInteger用于处理大数据的计算,它继承自java.math.BigInteger.用法相对来说比较简单,掌握几个基本运算即可. 初始化: BigInteger sum=new Big ...

  10. Zookeeper与Kafka集群搭建

    一 :环境准备: 物理机window7 64位 vmware 3个虚拟机 centos6.8  IP为:192.168.17.[129 -131] JDK1.7安装配置 各虚拟机之间配置免密登录 安装 ...