什么是POSIX?我已阅读Wikipedia文章,每次遇到该术语时都会阅读。事实是我从来没有真正了解过它是什么。
任何人都可以通过解释“ POSIX的需求”来向我解释吗?
什么是POSIX?我已阅读Wikipedia文章,每次遇到该术语时都会阅读。事实是我从来没有真正了解过它是什么。
任何人都可以通过解释“ POSIX的需求”来向我解释吗?
Answers:
POSIX是IEEE指定的一系列标准,用于阐明和统一Unix-y操作系统提供的应用程序编程接口(以及附属问题,例如命令行外壳实用程序)。当您编写依赖于POSIX标准的程序时,可以肯定地将它们轻松移植到大量的Unix派生系列中(包括Linux,但不仅限于此!);如果并且当您使用某些未作为Posix一部分标准化的Linux API时,如果将来要将该程序或库移植到其他Unix-y系统(例如MacOSX)上,您将很难。
Microsoft's market share on desktops, at least, makes it "what the world follows"
-有趣的是,自2009年发表此评论以来,情况发生了很大变化:)
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使用的规则:https : //unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
有两种类型: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._-
另请参阅:什么是文件系统的posix合规性?
不是强制性的,由POSIX使用,但是几乎没有其他地方,尤其是在GNU中。但是,确实如此,它太严格了,例如仅使用单个字母标志(例如-a
),不使用双连字符长版本(例如--all
)。
一些广泛使用的约定:
-
表示标准文件所在的位置--
终止标志,例如ls -- -l
列出名为-l
另请参阅:Linux命令行开关和参数是否有标准?
“ 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库(仿生),该库自Android O起不完全支持POSIX:Android POSIX兼容吗?
奖金等级
在Linux标准基础进一步扩展POSIX。
使用非框架索引,它们更具可读性和可搜索性:http : //pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
获取HTML页面的完整压缩版本以进行grepping: POSIX C API函数的列表在哪里?
POSIX是:
POSIX(发音为/ ˈpɒzɪks /)或“便携式操作系统接口[用于Unix]” 1是IEEE指定的一系列相关标准的名称,以定义应用程序编程接口(API)以及软件的外壳和实用程序接口与Unix操作系统的变体兼容,尽管该标准可以适用于任何操作系统。
基本上,这是一套通过具有(主要是)通用的API和实用程序来减轻开发和使用UNIX不同风味的痛苦的措施。有限的POSIX合规性也扩展到了Windows的各种版本。
让我作怪异的“非正式”解释。
POSIX是一组标准,试图将“ UNIX”和类UNIX系统与不兼容的系统区分开。它是由美国政府为采购目的创建的。这个想法是,美国联邦采购需要一种方法来合法地指定各种投标和合同的要求,该方法可以用来排除给定的现有代码库或编程人员无法移植的系统。
由于POSIX是在事后编写的,目的是描述一套大致相似的竞争系统,因此,它并不是以可以实现的方式编写的。
因此,例如,Microsoft的NT编写时具有足够的POSIX一致性,可以胜任某些竞标……即使就实际的可移植性和与UNIX系统的兼容性而言,POSIX子系统实际上是无用的。
数十年来,已经编写了各种其他的UNIX标准。诸如SPEC1170(必须兼容实现的指定的一百零七十个函数调用)和SUS(单一UNIX规范)的各种形式。
在大多数情况下,这些“标准”不足以适用于任何实际的技术应用。它们的存在主要是出于争论,法律争执和其他功能失调的原因。
POSIX是用于操作系统的标准,可以简化编写跨平台软件的工作。在Unix世界中,这尤其重要。
POSIX是IEEE和The Open Group提出的一组标准,描述了理想的Unix将如何运行。程序员,用户和管理员都可以熟悉POSIX文档,并期望POSIX兼容的Unix提供上述所有标准功能。
由于每个Unix的工作方式都有一些不同-Solaris,Mac OS X,IRIX,BSD和Linux都有其独特之处-POSIX对行业中的人员特别有用,因为它定义了可在其中运行的标准环境。例如, C库中的大多数功能都基于POSIX;因此,程序员可以在自己的应用程序中使用它,并期望它在大多数Unices中表现相同。
但是,Unix的不同领域通常是重点,而不是标准领域。
POSIX的伟大之处在于,欢迎您自己阅读:
第7期被称为POSIX.1-2008,其中有很多新事物-但是,用于POSIX.1的Google-fu等将使您看到Unix背后的全部历史。
1985年,来自整个计算机行业的公司的个人共同开发了POSIX(计算机环境的便携式操作系统接口)标准,该标准主要基于UNIX系统V接口定义(SVID)和其他早期的标准化工作。这些努力受到美国政府的鼓励,美国政府需要一个标准的计算环境以最大程度地减少其培训和采购成本。POSIX于1988年发布,是一组IEEE标准,为操作系统定义了API,外壳程序和实用程序接口。尽管这些标准针对的是类似UNIX的系统,但是它们可以应用于任何兼容的操作系统。现在这些标准已被接受,软件开发人员可以开发在所有符合UNIX,Linux,
摘自本书:Linux实用指南
Posix更像是一个操作系统,它是“操作系统标准”。您可以将其想象为一个虚构的OS,它实际上并不存在,但是有文档。这些论文是由IEEE定义的“ posix标准”,IEEE是美国的大型标准组织。实现此规范的OS是“符合Posix的”。
政府法规在其投资中倾向于使用符合Posix的解决方案,因此符合Posix的要求具有明显的财务优势,尤其是对于美国的大型IT公司而言。
对于完全兼容posix的OS的回报是,它保证了它将无缝编译和运行所有符合Posix的应用程序。
Linux是最著名的一种。OSX,Solaris,NetBSD和Windows NT也在这里播放。Free和OpenBSD仅“几乎”符合Posix。WinNT的posix-compliance只是避免上述政府法规的伪解决方案。
该标准为类Unix操作系统提供了通用基础。它指定了外壳程序的工作方式,ls和grep等命令的预期内容,以及C语言作者可以期望使用的许多C库。
例如,此处详细指定了命令行用户用来将命令串在一起的管道,这意味着C的popen(管道打开)功能是POSIX标准的,而不是ISO C标准的。
Posix控制着互操作性,可移植性,以及其他方面,例如fork的用法和机制,权限和文件系统标准(例如/ etc,/ var,/ usr等)。因此,当开发人员在符合Posix的系统(例如Linux)下编写程序时,通常(并非总是)保证可以在另一个符合posix的系统(例如IBM的AIX系统或Unix的其他商业变体)上运行。Posix是一件好事,因为它可以简化软件开发,以实现其最大的可移植性。希望这个答案有意义。
感谢Jed Smith&Tinkertim指出我的错误-我的糟糕!!!:(
关于POSIX的一些事实并非如此。
POSIX还是系统调用接口或API,已有30年的历史了。
它设计用于使用具有单个CPU的单台计算机对本地存储进行序列化数据访问。
从设计上讲,安全性并不是POSIX的主要关注点,多年来,它导致了众多的竞争条件攻击,并迫使程序员克服这些限制。
仍在发现严重的错误,而更安全的POSIX API设计可以避免这些错误。
POSIX希望用户一次发出一个同步呼叫,并等待其结果后再发出下一个。当今的程序员希望一次发出许多异步请求,以提高整体吞吐量。
对于访问高延迟至关重要的远程和云对象,此同步API尤其不利。