我看到POSIX在各处无处不在,并且我以它为UNIX的基本标准。.直到我在Wikipedia页面上注意到以下摘录:The Open Group


The Open Group是UNIX
商标的最著名的认证机构,它是UNIX单一技术规范的技术标准的发布,该技术标准扩展了POSIX标准,并且是UNIX系统的
官方定义。


如果UNIX系统的正式定义是POSIX的扩展,那么POSIX到底是什么? ,,,当然,这似乎是UNIX世界的试金石,但我不知道它如何适合整体情况。

评论

SUS是UNIX的正式定义,因为The Open Group(不是IEEE)拥有UNIX商标。请在下面找到我的答案。

unix.stackexchange.com/tags/posix/info

stackoverflow.com/questions/1780599/…

#1 楼

POSIX首先是1988年的标准,远早于Single UNIX规范。这是统一所有各种UNIX fork和类似UNIX的系统的尝试之一。 POSIX是IEEE标准,但是由于IEEE不拥有UNIX®商标,因此该标准不是UNIX®,尽管它当时基于现有的UNIX API。第一个标准POSIX.1正式称为IEEE std 1003.1-1988。[1] IEEE收取了获取该标准副本的巨额费用。

Open Group在1997年根据IEEE的POSIX标准的工作发布了Single UNIX规范(SUSv2)。 SUSv3于2001年由IEEE和The Open Group(称为Austin Group)之间的联合工作组发布。 SUSv3也称为POSIX:2001 [2]。现在还有POSIX:2004和POSIX:2008,它们是SUSv4的核心。至于UNIX®是什么,UNIX®就是目前的注册商标持有人所说的。自1994年以来,这就是The Open Group。

Novell从AT&T / USL收购了UNIX®系统业务,AT&T / USL正是UNIX®的诞生地。 1994年,他们将UNIX®商标的权利出售给了X / Open [3],现在称为The Open Group。然后,他们将UNIX®源代码作为UNIXWARE®出售给了SCO。[3] UNIX®本身已经分叉了很多次[4] [5],这部分是由于AT&T的许可模式。购买UNIX®为您提供了操作系统的完整资源以及构建它的完整工具链。拥有AT&TUNIX®许可证的任何人都可以分发和使用对源代码的修改。许可费成千上万。

BSD是Berkeley的一个项目,该项目对UNIX®操作系统进行了许多增强。 BSD代码是在比AT&T的源代码宽松得多的许可下发布的,并且不像GNU项目和Linux使用的GPL那样,不需要许可证费,甚至不需要与源代码一起分发。这导致BSD代码的很大一部分包含在各种商业UNIX分支中。大约在4.3BSD左右,他们几乎取代了对原始AT&TUNIX®源代码的任何需求。 FreeBSD / NetBSD / OpenBSD是4.3BSD的全部分支,它们是完整的操作系统,并且没有原始的AT&T源代码。他们也没有UNIX®商标的权利,但是他们的许多代码被商业UNIX操作系统使用。在UNIX上使用的Socket API是在BSD上开发的,并且借用了Unix Fast Filesystem代码并在各种UNIX操作系统(例如Solaris)上使用了它们自己的增强功能。

Linux于1991年开发,但从1991年开始开发不同于BSD,它使用了现有的GNU Project,它是大多数UNIX用户空间的无尘室实现。它实现了POSIX的大部分功能以实现兼容性,并且在设计上类似于UNIX,但是它与BSD所具有的AT&T或UNIX®并没有紧密的联系。

评论


一个很好的答案。所有(3)个答案都不错,但是这个答案非常有用(尤其是在另两个答案准备之后);正是我所需要的...谢谢(在问题正文下方)关于SUS的评论,我现在已经非常了解它了,谢谢...(而且我没有注意到这只是一个段落...太有趣的:)

– Peter.O
2011年4月26日在1:26

@Mikel希望我的编辑能有所帮助

–penguin359
2011年4月26日下午4:36

@ penguin359是一个很棒的答案!

– boehj
2011年4月28日在4:02

有人对X代表什么有个好主意吗?如果只是后缀,表示与Unix的关系,那不是小写吗?

– Alex W
15年8月24日在18:07

优秀的。谢谢。在过去的大部分时间里,我一直在从事计算工作,但是事情发生的“愚蠢”细节并不是我关注的重点。很高兴看到这条路。

–肯·英格拉姆
18-11-19在22:30



#2 楼

POSIX 7定义的最重要的内容



C API

使用以下内容极大地扩展了ANSI C:


更多文件操作:mkdirdirnamesymlinkreadlinklink(硬链接),poll()statsyncnftw()

进程和线程:forkexeclwaitpipesem_*shm_*killnice内存(sched_*),sleep,调度参数(mkfifosetpgid()),socket()mmapmlock
联网:mprotect

内存管理:madvisebrk()reg* fork

实用程序:正则表达式(sys_write

这些API还可确定它们所依赖的基础系统概念,例如sys_read需要过程的概念。

存在许多Linux系统调用,以实现特定的POSIX C API函数并使Linux兼容,例如cdls ... ...但是,许多这些系统调用也具有特定于Linux的扩展。

主要的Linux桌面实现:glibc,在许多情况下,它们仅提供系统调用的浅层包装。 >

CLI实用工具

例如:echomkdirsed,...

许多实用工具都是对应C API的直接外壳前端功能,例如grep

主要的Linux桌面实现:小型的GNU Coreutils,大型的GNU Coreutils:awka=b; echo "$a"HOME ... ...一些CLI实用程序由Bash内置实现。


Shell语言

例如,PATH

主要的Linux桌面实现:GNU Bash。


环境变量

例如:PATHPATH

0搜索语义已指定,包括斜杠如何防止EXIT_SUCCESS搜索。


程序退出状态

ANSI C将EXIT_FAILURE126表示为成功,将127表示为失败,并保留其余实现的定义。

POSIX添加:


> 128:找到命令但不可执行。
128 + SIGNAL_ID:找不到命令。

grep:被信号终止。

但是POSIX似乎没有指定Bash使用的-E规则:默认退出进程终止时的代码?




正则表达式

有两种类型:BRE(基本)和ERE(扩展) 。不推荐使用Basic,并且仅保留不破坏API。

这些都是由C API函数实现的,并在整个CLI实用程序中使用,例如默认情况下,echo 'a.1' | grep -E 'a.[[:digit:]]'接受BRE,而grep则接受ERE。例如:/dev/null

主要的Linux实现:glibc实现regex.h下的功能,/tmp之类的程序可以用作后端。 。


目录结构

例如:/NUL

Linux FHS大大扩展了POSIX。


文件名



.是路径分隔符

cwd不能使用

..a-zA-Z0-9._--a父级
便携式文件名


最多使用14个字符和256个完整路径
只能包含:--all




另请参见:https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem


命令行实用程序API约定

不是强制性的,由POSIX使用,但是几乎没有其他地方,尤其是在GNU中。但确实如此,它过于严格,例如仅单字母标志(例如-),没有双连字符长版本(例如--)。

一些广泛使用的约定:




ls -- -l表示标准文件所在的标准输入

-l终止标志,例如setfacl列出名为setxattr的目录

另请参阅:https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments


“ POSIX ACL” (访问控制列表),例如用作/proc的后端。

已撤消,但已在多个操作系统中实现,包括在Linux中使用apt-get


谁符合POSIX?

许多系统都严格遵循POSIX,但实际上很少有维护该标准的Open Group认证。著名的认证产品包括:


OS X(Apple)X代表10和UNIX。是大约2001年发布的第一个Apple POSIX系统。另请参见:https://stackoverflow.com/questions/5785516/is-osx-a-posix-os

AIX(IBM)
HP-UX(HP)
Solaris(Oracle)

大多数Linux发行版都非常合规,但未通过认证,因为它们不想支付合规性检查。浪潮的K-UX和华为的EulerOS是两个经过认证的示例。

通过认证的系统的官方列表位于:https://www.opengroup.org/openbrand/register/,也可以在Wiki页面上找到。 。

Windows

Windows在其某些专业发行版中实现了POSIX。

由于它是一项可选功能,因此程序员无法将其用于大多数最终用户应用程序。

Windows 8已弃用该支持:


https://stackoverflow.com/questions/4746043/where-does-microsoft-windows-7-posix -implementation-currently-stand
https://superuser.com/questions/495360/does-windows-8-still-implement-posix
功能请求:https://windows.uservoice.com/ forums / 265757-windows-feature-suggestions / suggestions / 6573649-full-posix-support


在2016年,一个新的类似于Linux的正式API称为“ Linux的Windows子系统”。它包括Linux系统调用,ELF运行,q4312079q文件系统的一部分,Bash,GCC,(TODO可能是glibc?),q4312079q等: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 API功能”,但是要求“如果要在Windows上运行,请从源代码重建应用程序”。 MSYS2是一个相关的项目,似乎在Cygwin的基础上增加了更多功能。 Android O:https://stackoverflow.com/questions/27604455/is-android-posix-compatible

奖金级别

Linux Standard Base进一步扩展了POSIX。

使用非框架索引,它们更具可读性和可搜索性:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

获取完整的压缩文件用于grepping的HTML页面版本:https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

评论


问题是关于POSIX和SUS,但是这个答案根本没有提到SUS ...

–基德布拉
17-10-6在12:16

@Kidburla是一个绝佳的机会,可以添加您自己的答案并获得代表:-)(或将其编辑为我的代表,并给我代表呵呵)

– Ciro Santilli郝海东冠状病六四事件法轮功
17-10-6在12:27

实际上,有些Linux发行版已经过Unix认证,例如K-UX和Huawei EulerOS。它们出现在POSIX认证列表中,也出现在Opengroup网站上

–phuclv
18-10-21在3:31

@phuclv谢谢,我已将其添加到答案中。

– Ciro Santilli郝海东冠状病六四事件法轮功
18-10-21在6:30

#3 楼

POSIX是可移植操作系统标准。它描述了兼容操作系统必须提供给软件的某些实用程序,API和服务(例如套接字,文件I / O和线程),以及有关如何从程序中调用它们的约定。

这个想法是,为一个兼容POSIX的操作系统编写的程序比在不兼容POSIX的操作系统之间移植更容易移植到另一个POSIX操作系统。这就是为什么将应用程序从FreeBSD移植到Linux比将其从FreeBSD移植到Windows要容易得多的原因(尽管Windows表面上支持POSIX的一个子集。)

#4 楼

POSIX是UNIX的一个子集,旨在覆盖其他操作系统的各种类似Unix的环境。这最初包括环境,例如Eunice for VMS,Windows NT的POSIX个性和Apollo Domain / OS。您可以将其视为操作系统服务子集的标准可移植性API,该操作系统服务的行为在Unix和非Unix之间是相同的。有关更多信息,请参见http://standards.ieee.org/develop/wg/POSIX.html。

评论


我现在已经阅读了更多有关它的内容,而且看起来Uinx确实是鸡,而POSIX是鸡蛋。.但我确实想知道UNIX是否仍然统治着市场。和UNIX必须符合POSIX? ...顺便说一句。似乎POSIX是由Richard Stallman创造的。

– Peter.O
2011-04-25 19:11



@ fred.bear:简短的回答:UNIX(商标)必须符合POSIX; Unix(产品)是POSIX的主要基础。 unices(操作系统家族)大多一致,但有更多共同点。请参阅Linux是Unix吗?是Mac OS X,UNIX吗?有关的讨论。

–吉尔斯'所以-不再是邪恶的'
2011年4月25日在20:34

@ fred-bear很多人认为POSIX标准是当今由Linux内核开发社区指导的,恕我直言,这不是一件好事。

–sakisk
2011年4月26日下午14:05

@faif我从未听说过,发现它不太可能,可以发表参考吗?

–penguin359
2011年4月28日在4:06

@GillesUNIX®商标的所有者Open Group还负责UNIX®认证和规范,它们被称为Single UNIX Specification或SUS。 POSIX由不负责UNIX®的IEEE开发。自2001年以来,它们基本上是同步开发的,但是从技术上讲,它是SUS,现在是定义UNIX®的版本4。

–penguin359
2011年4月28日下午4:11