我看到POSIX到处都在提到,并且我以它为UNIX的基本标准。.直到我在Wikipedia页面上注意到以下摘录:The Open Group
由The Open Group是最有名的认证机构为UNIX商标,其公布统一UNIX规范技术标准,它扩展了POSIX标准,是UNIX系统的官方定义。
如果UNIX系统的正式定义是POSIX的扩展,那么POSIX到底是什么?,,,当然,这似乎是UNIX世界的试金石,但我不知道它如何适合整体情况。
我看到POSIX到处都在提到,并且我以它为UNIX的基本标准。.直到我在Wikipedia页面上注意到以下摘录:The Open Group
由The Open Group是最有名的认证机构为UNIX商标,其公布统一UNIX规范技术标准,它扩展了POSIX标准,是UNIX系统的官方定义。
如果UNIX系统的正式定义是POSIX的扩展,那么POSIX到底是什么?,,,当然,这似乎是UNIX世界的试金石,但我不知道它如何适合整体情况。
Answers:
POSIX首先是1988年的标准,远早于Single UNIX规范。这是统一所有各种UNIX fork和类似UNIX的系统的尝试之一。POSIX是IEEE标准,但是由于IEEE不拥有UNIX®商标,因此该标准不是UNIX®,尽管它当时基于现有的UNIX API。第一个标准POSIX.1的正式名称为IEEE std 1003.1-1988。[ 1 ] IEEE收取了大量费用才能获得该标准的副本。
开放组织于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从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 Project和Linux使用的GPL不同,它不需要许可费,甚至不需要与源代码一起分发。这导致BSD代码的很大一部分包含在各种商业UNIX分支中。大约在4.3BSD左右,他们几乎取代了对原始AT&TUNIX®源代码的任何需求。FreeBSD / NetBSD / OpenBSD是4.3BSD的全部分支,它们是完整的操作系统,并且没有原始的AT&T源代码。他们也没有UNIX®商标的权利,但是他们的许多代码被商业UNIX操作系统使用。
Linux是1991年开发的,但是与BSD不同,它是从头开始开发的,它使用现有的GNU Project,它是大多数UNIX用户空间的无尘室实现。它实现了POSIX的大部分功能以实现兼容性,并且在设计上类似于UNIX,但是它与BSD所具有的AT&T或UNIX®没有紧密的联系。
POSIX 7定义的最重要的事情
极大地扩展了ANSI C,例如:
mkdir
,dirname
,symlink
,readlink
,link
(硬链接)poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
,semaphors sem_*
,共享存储器(shm_*
), kill
,调度参数(nice
,sched_*
), ,,sleep
mkfifo
setpgid()
socket()
mmap
,mlock
,mprotect
,madvise
,brk()
reg*
)这些API还确定它们所依赖的基础系统概念,例如,fork
需要过程的概念。
很多Linux系统调用存在实现特定的POSIX C API函数使Linux兼容的,例如sys_write
,sys_read
,...许多这些系统调用的也有特定的Linux的扩展不过。
主要的Linux桌面实现:glibc,在许多情况下,它仅提供系统调用的浅层包装。
如:cd
,ls
,echo
,...
许多实用程序都是相应C API函数的直接shell前端,例如mkdir
。
主要的Linux桌面实现:GNU Coreutils的为小的,独立的GNU项目为大的:sed
,grep
,awk
,...一些CLI工具类猛砸实现为内置插件。
例如, a=b; echo "$a"
主要的Linux桌面实现:GNU Bash。
如:HOME
,PATH
。
PATH
指定了搜索语义,包括斜杠如何阻止PATH
搜索。
ANSI C表示成功0
或失败,并定义了其余实现。EXIT_SUCCESS
EXIT_FAILURE
POSIX添加:
126
:找到命令,但不能执行。
127
: 找不到相关命令。
> 128
:被信号终止。
但是POSIX似乎没有指定128 + SIGNAL_ID
Bash使用的规则:进程终止时的默认退出代码?
有两种类型:BRE(基本)和ERE(扩展)。不推荐使用Basic,并且仅保留不破坏API。
这些由C API函数实现,并在整个CLI实用程序中使用,例如grep
,默认情况下接受BRE ,并使用接受ERE -E
。
例如: echo 'a.1' | grep -E 'a.[[:digit:]]'
主要的Linux实现:glibc实现regex.h下的功能,这些程序grep
可以用作后端。
如:/dev/null
,/tmp
Linux FHS大大扩展了POSIX。
/
是路径分隔符NUL
不能使用.
是cwd
,..
父母a-zA-Z0-9._-
另请参阅:https : //stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
不是强制性的,由POSIX使用,但是几乎没有其他地方,尤其是在GNU中。但是确实如此,它的限制太严格了,例如仅使用单个字母标志(例如-a
),没有使用双连字符的长版本(例如--all
)。
一些广泛使用的约定:
-
表示标准文件所在的位置--
终止标志,例如ls -- -l
列出名为-l
另请参阅:https : //stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
“ POSIX ACL”(访问控制列表),例如,用作的后端setfacl
。
撤消了该功能,但已在多个OS中实现了该功能,包括在Linux中使用setxattr
。
谁符合POSIX?
许多系统都严格遵循POSIX,但实际上很少有人通过维护该标准的Open Group进行认证。著名的认证产品包括:
大多数Linux发行版都非常合规,但未通过认证,因为它们不想支付合规性检查。浪潮的K-UX和华为的EulerOS是两个获得认证的示例。
认证系统的官方列表可在以下网址找到:https://www.opengroup.org/openbrand/register/,也可以在Wiki页面上找到。
视窗
Windows在其某些专业发行版中实现了POSIX。
由于它是一项可选功能,因此程序员无法将其用于大多数最终用户应用程序。
Windows 8不支持该支持:
在2016年,一个新的类似于Linux的正式API称为“ Windows子系统Linux”。它包括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 API功能”,但是要求“如果希望在Windows上运行,请从源代码重建应用程序”。MSYS2是一个相关项目,似乎在Cygwin之上添加了更多功能。
安卓系统
Android拥有自己的C库(Bionic),自Android O起不完全支持POSIX:https : //stackoverflow.com/questions/27604455/is-android-posix-compatible
奖金等级
在Linux标准基础进一步扩展POSIX。
使用非框架索引,它们更具可读性和可搜索性:http : //pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
获取HTML页的完整压缩版本以进行grepping:https ://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939
POSIX是UNIX的一个子集,旨在覆盖其他操作系统的各种类似Unix的环境。这最初包括环境,例如Eunice for VMS,Windows NT的POSIX个性和Apollo Domain / OS。您可以将其视为操作系统服务子集的标准可移植性API,该操作系统服务的行为在Unix和非Unix之间是相同的。有关更多信息,请参见http://standards.ieee.org/develop/wg/POSIX.html。