我从来没有真正明白:什么是POSIX?
什么是POSIX? 我阅读了维基百科的文章 ,每当遇到这个词,我都会读它。 事实是,我从来没有真正明白它是什么。
任何人都可以解释“对POSIX的需要”给我解释吗?
POSIX是由IEEE指定的一系列标准,用于阐明和统一由Unix-y操作系统提供的应用程序编程接口(以及辅助问题,如命令行shell程序)。 当你编写依赖于POSIX标准的程序的时候,你可以很容易地将它们移植到Unix系列衍生产品(包括Linux,但不限于它)中。 如果当您使用某些未经标准化的Linux API作为Posix的一部分时,如果您将来想要将该程序或库移植到其他Unix-y系统(例如MacOSX),您将会遇到麻烦。
POSIX 7定义的最重要的东西
-
C API
大大延伸ANSI C的东西,如:
- 更多文件操作:
mkdir
,dirname
,symlink
,readlink
,link
(hardlinks),poll
,sync
- 进程和线程:
fork
,execl
,pipe
,semaphorssem_*
,共享内存(shm_*
),kill
,调度参数(nice
,sched_
),sleep
- 联网
- 常用expression
- 先进的内存pipe理:
mmap
,mlock
,mprotect
,madvise
这些API也决定了它们依赖的基本系统概念,例如
fork
需要一个过程的概念。许多Linux系统调用存在实现特定的POSIX C API函数,并使Linux兼容,例如
sys_write
,sys_read
,…主要的Linux桌面实现:glibc,在许多情况下,它只是提供了一个浅层包装到系统调用。
- 更多文件操作:
-
CLI实用程序
例如:
cd
,ls
,echo
,…许多实用程序都是相应C API函数的直接shell前端,例如
mkdir
。主要的Linux桌面实现:小的GNU Coreutils,大的单独的GNU项目:
sed
,grep
,awk
,…某些CLI实用程序由Bash 作为内build实现 。 -
壳牌语言
例如,
a=b; echo "$a"
a=b; echo "$a"
主要的Linux桌面实现:GNU Bash。
-
环境variables
例如:
HOME
,PATH
。 -
程序退出状态
ANSI C说成功为
0
或EXIT_SUCCESS
,失败为EXIT_FAILURE
,剩下的实现定义。POSIX补充说:
-
126
:命令发现但不可执行。 -
127
:找不到命令。 -
> 128
:由信号终止。但POSIX似乎没有指定Bash使用的
128 + SIGNAL_ID
规则: https :128 + SIGNAL_ID
-
-
正则expression式
有两种types:BRE(基本)和ERE(扩展)。 基本不推荐使用,只能保持不中断API。
这些是通过C API函数实现的,并在整个CLI实用程序中使用,例如,
grep
默认接受BRE,ERE使用-E
。例如:
echo 'a.1' | grep -E 'a.[[:digit:]]'
echo 'a.1' | grep -E 'a.[[:digit:]]'
主要的Linux实现:glibc实现regex.h下的函数,像
grep
这样的程序可以用作后端。 -
目录结构
例如:
/dev/null
,/tmp
Linux FHS极大地扩展了POSIX。
-
文件名
-
/
是path分隔符 -
NUL
不能使用 -
.
是cwd
,..
父母 - 便携文件名
- 最多使用最多14个字符和256个完整path
- 只能包含:
a-zA-Z0-9._-
另请参阅: 文件系统的posix合规性是什么?
-
-
命令行实用程序API约定
不是强制性的,由POSIX使用,但几乎没有其他地方,特别是不在GNU。 但是的确如此,限制性太强,例如只有单字母标志(例如
-a
),没有双连字符长版本(例如--all
)。一些广泛使用的约定:
-
-
意味着stdin预期的文件 -
--
终止标志,例如ls -- -l
列出名为-l
的目录
另请参阅: Linux命令行开关和参数是否有标准?
-
谁符合POSIX?
许多系统紧跟POSIX,但很less有实际上由维持该标准的Open Groupauthentication。 值得注意的authentication包括:
- OS X(Apple)X代表10和UNIX。 是2001年左右发布的第一个苹果POSIX系统。另见: OSX是POSIX操作系统吗?
- AIX(IBM)
- HP-UX(HP)
- Solaris(Oracle)
大多数Linux发行版都非常合规,但没有通过authentication,因为他们不想支付合规性检查。
请参阅wiki页面 。
视窗
Windows在其一些专业发行版上实现了POSIX。
由于这是一个可选function,程序员不能依赖于它为大多数最终用户应用程序。
Windows 8中不支持支持:
- Microsoft Windows 7 POSIX的实现目前在哪里?
- https://superuser.com/questions/495360/does-windows-8-still-implement-posix
- function请求: https : //windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support
在2016年,一种名为“Windows Linux子系统”的官方类似Linux的API被宣布。 它包括Linux系统调用,ELF运行, /proc
文件系统的部分,Bash,GCC,(TODO可能是glibc?), apt-get
等等: https : //channel9.msdn.com/Events/Build/2016/P488所以我相信这将允许Windows运行很多,如果不是全部,POSIX。 但是,它的重点是开发人员/部署,而不是最终用户。 特别是,没有计划允许访问Windows GUI。
官方Microsoft POSIX兼容性的历史概述: http : //brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin是一个众所周知的GPL第三方项目,它为Windows“提供了实质性的POSIX APIfunction”,但要求您“如果您希望在Windows上运行,请从源代码重新构build您的应用程序”。 MSYS2是一个相关的项目,似乎在Cygwin之上添加了更多的function。
Android的
Android POSIX兼容?
奖金水平
Linux标准库进一步扩展了POSIX。
使用非帧索引,它们更具可读性和可search性: http : //pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
获取完整的压缩版本的HTML页面以进行grepping: 是否有POSIX API /函数的列表?
POSIX是:
POSIX(发音为/pɒzɪks/)或“便携式操作系统接口[用于Unix]” 1是由IEEE指定的用于定义应用程序编程接口(API)的相关标准族的名称,以及用于软件的shell和实用程序接口兼容Unix操作系统的变体,尽pipe标准可以适用于任何操作系统。
基本上,这是一套措施,通过拥有(大部分)通用的API和实用程序来缓解开发和使用不同UNIX版本的痛苦。 有限的POSIX合规性也扩展到各种版本的Windows。
让我给出粗俗的“非官方”的解释。
POSIX是一组试图将“UNIX”和类UNIX系统区分开来的标准。 它是由美国政府为采购目的而创build的。 这个想法是,美国的联邦采购需要一种方式来合法地规定各种投标和合同的要求,这种方式可以用来排除现有的代码库或编程人员不能移植的系统。
由于POSIX是事后编写的…来描述一个类似松散的竞争系统集……它不是以可以实现的方式编写的。
所以,举个例子来说,微软的NT在编写时已经具有足够的符合POSIX标准的资格,即使POSIX子系统在实际的可移植性和与UNIX系统的兼容性方面实质上是无用的。
几十年来,各种其他的UNIX标准已经被编写出来。 像SPEC1170(指定一千一百七十个函数调用必须兼容)以及SUS(单一UNIX规范)的各种版本。
这些“标准”大部分都不适用于任何实际的技术应用。 他们大多存在争议,法律纠纷和其他function障碍的原因。
POSIX是由IEEE和The Open Group提出的一套标准,描述了理想的Unix如何运作。 程序员,用户和pipe理员都可以熟悉POSIX文档,并期望一个POSIX投诉Unix提供所有提到的标准工具。
由于每一个Unix的操作方式都有所不同,Solaris,Mac OS X,IRIX,BSD和Linux都有它们的怪癖 – POSIX对于业界人士来说特别有用,因为它定义了一个标准的运行环境。例如, C库中的大部分函数都基于POSIX; 因此程序员可以在他的应用程序中使用一个程序员,并期望它在大多数Unices中performance相同。
但是,Unix的分歧领域通常是重点,而不是标准领域。
关于POSIX的好处是,欢迎您自己阅读:
开放组织基本规格问题7
第7期被称为POSIX.1-2008,其中有一些新的东西 – 然而,POSIX.1的Google-fu可以让你看到Unix背后的全部历史。
POSIX是一个操作系统的标准,它可以使编写跨平台软件变得更容易。 在Unix的世界里,这是一个特别重要的事情。
1985年,来自整个计算机行业公司的个人共同开发了主要基于UNIX系统V接口定义(SVID)和其他标准化工作的POSIX(计算机环境便携式操作系统接口)标准。 这些努力得到了美国政府的推动,这需要一个标准的计算环境来减less培训和采购成本。 POSIX于1988年发布,是一组IEEE标准,为操作系统定义了API,shell和实用程序接口。 尽pipe针对类UNIX系统,这些标准可以适用于任何兼容的操作系统。 现在,这些标准已经被接受,软件开发人员能够开发在所有合适版本的UNIX,Linux和其他操作系统上运行的应用程序。
从这本书:Linux实用指南
这个标准为Unix类操作系统提供了一个共同的基础。 它指定了shell应该如何工作,从ls和grep这样的命令中可以得到什么,以及一些C作者可以使用的C库。
例如,命令行用户用来串行命令的pipe道在这里详细说明,这意味着C的popen(pipe道打开)function是POSIX标准的,而不是ISO C标准。
POSIX为操作系统或程序定义了一套标准。 目标是编写与类UNIX系统兼容的新软件。
例如,在Linux上运行的程序也可以在其他类UNIX系统(如Solaris,HP-UX和AIX等)上编译和运行。
最stream行的例子是GNU Bash
,它是100%POSIX合规性和gawk
工具。
Posixpipe理着互操作性,可移植性以及诸如fork,权限和文件系统标准(如/ etc,/ var,/ usr等)的使用和机制。 因此,当开发者在诸如Linux之类的Posix兼容系统下编写程序时,通常并不总是保证在诸如IBM的AIX系统或Unix的其他商业变体的其他符合posix的系统上运行。 Posix是一个好东西,因此它可以简化软件开发,实现最大的可移植性。 希望这个答案是有道理的。
感谢杰德史密斯和Tinkertim指出我的错误 – 我的坏! 🙁
Posix更像是一个操作系统,它是一个“操作系统标准”。 你可以把它想象成一个虚构的操作系统,它实际上并不存在,但它有一个文档。 这些论文是美国大型标准组织IEEE所定义的“posix标准”。 实现这个规范的操作系统是“Posix兼容的”。
政府法规在其投资中更喜欢符合Posix标准的解决scheme,因此符合Posix标准具有显着的财务优势,特别是对于美国的大型IT公司。
操作系统完全符合posix标准,这是一个保证,它将无缝地编译和运行所有Posix兼容的应用程序。
Linux是最知名的一个。 OSX,Solaris,NetBSD和Windows NT也在这里玩。 FreeBSD和OpenBSD只是“接近”Posix兼容的。 WinNT的posix合规只是一个假的解决scheme,以避免上述的政府监pipe。