POSIX , SUS, XSI

Portable Operating System Interface
POSIX是给Unix/Linux系统使用的通用调用接口(SCI, System Call Interface),以期实现同一个程序不需要任何修改就可以实现在不同的Unix/Linux系统间的移植,windows 后来也做了一些工作来支持POSIX,比如windows NT 。POSIX.1 包含了ISO C的标准函数库两部分(C语言就是为了写Unix开发的语言),分为必须部分和可选部分,只有将这两部分全部实现的才能被称作Unix操作系统

ISO C VS POSIX C

  1. ISO C标准
    1989年, C程序设计语言的ANSI标准得到批准,此标准被采纳为国际标准ISO/IEC 9899
    1990年, 1990 ISO C标准的意图是提供C程序的可移植性,使其能够适合于大量不同的操作系统
    1991年, ISO C标准被更新,并批准为iso/iec 9899:1999 , ISO C标准定义的头文件有24个
  2. IEEE POSIX 标准
    POSIX的目的是提升应用程序在各种UNIX系统环境之间的可移植性
    POSIX.1包含了ISO C标准函数库,同时包含两部分:必须部分和可选部分(X/Open系统接口(X/Open System Interface,XSI))。POSIX.1中的X/Open系统选项描述了可选的接口,只有遵循XSI实现的才能称为UNIX系统。

Single UNIX Specification(SUS)

SUS是POSIX.1标准的一个超集,它定义了一些附加结构扩展了POSIX.1规范提供的功能POSIX.1相当于是SUS 中基本规范部分。
总结: ISO C是POSIX的子集,POSIX是SUS的子集,SUS是POSIX的扩展,X/Open系统接口(XSI)是POSIX.1中的接口,描述了POSIX中的可选接口,只有遵循XSI的实现才能称为UNIX系统
ISO/IEC 9899:1990 (C89, C90).
The 15 standard headers in C89 are:

<assert.h>  <ctype.h>   <errno.h>   <float.h>   <limits.h>  <locale.h>
<math.h>    <setjmp.h>  <signal.h>  <stdarg.h>  <stddef.h>  <stdio.h>
<stdlib.h>  <string.h>  <time.h>

ISO/IEC 9899:1990/Amd.1:1995.
The 3 extra headers introduced in C94* (Amendment 1) are:

<iso646.h>  <wchar.h>   <wctype.h>

ISO/IEC 9899:1999 (C99).
The 6 extra headers in C99 are:

<complex.h>     <fenv.h>            <inttypes.h>        <stdbool.h>     <stdint.h>      <tgmath.h>

ISO/IEC 9899:2011 (C11). The 5 extra headers in C2011 (for a total of 29) are:

<stdalign.h>        <stdatomic.h>       <stdnoreturn.h> <threads.h>     <uchar.h>

ISO/IEC 9045:2008 (POSIX 2008, SUS)
POSIX.1 C99

POSIX.1 STANDARD

<arpa/inet.h>   <dirent.h>      <fcntl.h>       <fnmatch.h>     <glob.h>        <grp.h>
<net/if.h>      <netdb.h>       <netinet/in.h>  <netinet/tcp.h> <pwd.h>         <regex.h>
<sys/mman.h>    <sys/select.h>  <sys/socket.h>  <sys/stat.h>    <sys/time.h>    <sys/times.h>
<sys/types.h>   <sys/un.h>      <sys/utsname.h> <sys/wait.h>    <tar.h>         <termios.h>
<unistd.h>      <utime.h>       <wordexp.h>

POSIX.1 XSI

<cpio.h>        <dlfcn.h>       <fmtmsg.h>      <ftw.h>         <iconv.h>       <langinfo.h>
<libgen.h>      <monetary.h>    <ndbm.h>        <nl_types.h>    <poll.h>        <search.h>
<strings.h>     <syslog.h>      <sys/ipc.h>     <sys/msg.h>     <sys/resource.h><sys/sem.h>
<sys/shm.h>     <sys/statvfs.h> <sys/time.h>    <sys/ timeb.h>  <sys/uio.h>     <ucontext.h>
<ulimit.h>      <utmpx.h>   

POSIX.1 Asynchronous I/O:

<aio.h>         <mqueue.h>      <pthread.h>     <sched.h>       <semaphore.h>   <spawn.h>
<stropts.h>     <trace.h>

On some platforms, X/Open Curses requires another set of headers:

<varargs.h>     <curses.h>      <term.h>        <uncntrl.h>

Q:遵循POSIX标准的OS是否具有完全相同系统调用函数原型???
A:支持POSIX标准的OS都提供一套符合POSIX标准的接口规范,即SUS(ANSI C+ POSIX.1+…)而不是相同的SCI

Bash

Bourn Again Shell
Shell就是包在操作系统外面的一个“壳”, 用于用户和系统间的交互,早期有各种shell,包括K shell,B shell, C shell,Bash就是大名鼎鼎的B shell升级版,所以叫Again, 当前安装一个Linux发行版默认的都是Bash

GNU

GNU‘s Not Unix
一个由开发者维护的自由软件社区,之所以强调 "is not Unix"是因为Linux操作系统是Unix-like, 但却是一个自由软件

Copyleft

相对于商业世界传统的“Copyright(版权)”, 它使任何人都可以复制,修改再发布任何一个自由软件,是开源世界的基础

GPL

General Public License
GNU发行的软件遵循的许可,

FHS

Filesystem Hierarchy Standard
一种定义目录属性的标准,定义出四种目录特征,sharable,unsharable,static,variable

GCC

GNU C Compiler, GNU Compiler Collection
gcc早期只是C语言的编译器,就是前面的缩写,后来逐渐也能编译其他语言(eg:cpp),所以就变成的后面的缩写。 gcc是Linux系统的缺省编译器

POSIX, Bash, GPL etc的更多相关文章

  1. Unix历史及相关概念回顾

    欢迎来到Unix的世界 很多人都用了很多年的Unix(其实更熟悉的是叫Linux),也接触到Unix世界中的各种概念,比如GCC.GNU.BSD.POSIX.GPL等等,也大都知道一些传奇的如雷贯耳的 ...

  2. 使用sh-x调试shell脚本_转

    参考:http://blog.chinaunix.net/uid-20564848-id-73502.html 1. 通过sh -x 脚本名  #显示脚本执行过程2.脚本里set -x选项,轻松跟踪调 ...

  3. Python虚拟环境安装virtualenv

    解决了多个版本共存的问题 virtualenv 为每个不同项目提供一份 Python 安装.它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立. 安装vir ...

  4. python实战博客

    2018-10-31 更新Logging日志记录以及异常捕获 感谢廖大教程.Python实战 直接在闲置的服务器上开发.阿里云Centos 6.8 64位. 1 搭建开发环境 Python 环境是Py ...

  5. 高级Bash脚本编程指南(27):文本处理命令(三)

    高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...

  6. [Bash Shell] Shell学习笔记

    1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命 ...

  7. -bash: fork: retry: Resource temporarily unavailable

    登陆不了服务器The server refused to start a shell. 登陆服务器后执行ls命令报错:   1 2 $ls -bash: fork: retry: Resource t ...

  8. bash 源码分析

    下载解压 bash-3.2 编译bash export LFS=/my/soft/mylfs tar xvf $LFS/sources/bash-3.2.tar.gz -C $LFS/sources/ ...

  9. Bash 什么时候会给 HOME 赋初始值

    今天无意发现下面这个表现: $  env -i bash -c cd bash: line 0: cd: HOME not set $ env -i bash -c 'echo $HOME' 这表明了 ...

随机推荐

  1. Oracle 数据库基础学习 (二) 学习小例子:创建一个表,记录商品买卖的情况

      运行环境:Oracle database 11g + PL/SQL Developer ex: --创建一个表 create table plspl_test_product( --加入not n ...

  2. 容器--WeakHashMap

    一.概述 WeakHashMap是Map的一种,根据其类的命令可以知道,它结合了WeakReference和HashMap的两种特点,从而构造出了一种Key可以自动回收的Map. 前面我们已经介绍了W ...

  3. C++析构函数调用异常问题研究

    最近又遇到一个奇葩问题,程序在自己的开发机器和某些机器上运行完好,但是在测试人员的几台机器上运行就直接推出了.开始以为是出现了野指针,因为delete野指针时程序会直接退出.代码翻来覆去过来即便确认没 ...

  4. js中的原型、继承的一些想法

    最近看到一个别人写的js类库,突然对js中的原型及继承产生了一些想法,之前也看过其中的一些内容,但是总不是很清晰,这几天利用空闲时间,对这块理解了一下,感觉还是有不通之处,思路上没那么条理,仅作为分享 ...

  5. Java经典实例:把字符串解析为日期时间

    Java版本:1.8开始 import java.time.LocalDate; import java.time.LocalDateTime; /** * Created by Frank */ p ...

  6. Java的自动递增和递减

    和C 类似,Java 提供了丰富的快捷运算方式.这些快捷运算可使代码更清爽,更易录入,也更易读者辨读.两种很不错的快捷运算方式是递增和递减运算符(常称作"自动递增"和"自 ...

  7. Unicode Character Table – Unicode 字符大全

    Unicode(统一码.万国码.单一码)是一种在计算机上使用的字符编码.它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言.跨平台进行文本转换.处理的要求.Unicode Chara ...

  8. [deviceone开发]-仿微信主界面示例

    一.简介 模仿微信主界面的4个页面,作为一个很常规应用的框架模板,值得参考.另外包括简单的菜单,其中搜索还支持语音录入,不过你需要增加飞讯的语音组件重新打包,才能看到效果 二.效果图 三.相关下载 h ...

  9. window7安装git详解

    1.Git详细介绍 一.Git的诞生 Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢? 事实是 ...

  10. vs2010 未能将脚本调试器附加到计算机上的进程。已附加了一个调试器

    图片: 上周不小心升级了IE10,今天,VS2010报:未能将脚本调试器附加到计算机XXX上的进程iexplore.exe . 已附加了一个调试器”.启动调试失败. 到网上查找解决办法,最后用这个解决 ...