背景

人们在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. Input file 文本框美化

    HTML原生的input file 上传按钮有多(无)不(力)漂(吐)亮(槽)我就不多说了.大家几乎在项目中都会有遇到图片.等文件需要上传的地方,好看的文件上传按钮会使人身心愉悦(我瞎说的).好了不多 ...

  2. Python从入门到放弃之迭代器

    迭代器是Python2.1中新加入的接口(PEP 234),说明如下: The iterator provides a 'get next value' operation that produces ...

  3. 2017-2-20 C#基础 运算符

    C#的运算符主要分五种:算数运算符,关系运算符,逻辑运算符,条件运算符,赋值运算符.算术运算符有 + - * /  %    ++    --;关系运算符有    ==    !=    >   ...

  4. linux 下rabbitmq 安装

    准备工作: erlang环境  otp_src_19.0.tar.gz rabbitmq   abbitmq-server-generic-unix-3.6.5.tar.xz # yum -y ins ...

  5. 每天一个Linux命令(09)--touch命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch  [选项]··· 文件··· 2.命令参数: -a 或 ...

  6. 类比Spring框架来实现OC中的依赖注入

    如果你之前使用过JavaEE开发中的Spring框架的话,那么你一定对依赖注入并不陌生.依赖注入(DI: Dependency Injection)是控制反转(IoC: Inversion of Co ...

  7. [C#7] 1.Tuples(元组)

    1. 老版本代码 class Program { static void Main(string[] args) { var fullName = GetFullName(); Console.Wri ...

  8. ELK日志套件安装与使用

    1.ELK介绍     ELK不是一款软件,而是elasticsearch+Logstash+kibana三款开源软件组合而成的日志收集处理套件,堪称神器.其中Logstash负责日志收集,elast ...

  9. 强大的修图app--美图秀秀

    美图秀秀的强大之处   市面上有很多图形处理软件,最专业的是ps,但是ps做起来需要的专业技术很高,而美图秀秀可以说用起来并不需要很专业,操作起来非常方便,而且界面可爱.所以说美图秀秀是一款很好用的免 ...

  10. 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝

    1664: [Usaco2006 Open]County Fair Events 参加节日庆祝 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 255  S ...