"POSIX"是什么意思?

cla*_*aws 822 unix linux posix terminology

什么是POSIX?我已阅读维基百科的文章,每次遇到这个词时我都会阅读它.事实是,我从来没有真正理解它是什么.

任何人都可以通过解释"对POSIX的需求"向我解释一下吗?

Ale*_*lli 572

POSIX是由IEEE指定的一系列标准,用于澄清和统一Unix-y操作系统提供的应用程序编程接口(以及辅助问题,如命令行shell实用程序).当您编写程序以依赖POSIX标准时,您可以非常肯定能够轻松地将它们移植到大量的Unix衍生产品系列中(包括Linux,但不仅限于它!); 如果你使用的某些Linux API没有标准化为Posix的一部分,那么如果你希望将来将该程序或库移植到其他Unix-y系统(例如MacOSX),你将会遇到更难的时间.

  • 不,标准是在API级别 - 每个指定的调用可以在内核中实现,或者在另一个调用的C库中实现,这对于Posix(以及对于您的程序也是如此;-)来说很好.MacOSX符合Posix标准,请参阅http://devworld.apple.com/leopard/overview/osfoundations.html.对于Windows,请参阅http://en.wikipedia.org/wiki/POSIX#POSIX_for_Windows:Posix合规性目前仅包含在Enterprise和Ultimate版本中(不是更便宜的版本! - ),尽管您可以获得与Cygwin的合作, http://en.wikipedia.org/wiki/Cygwin. (32认同)
  • 我认为,爪子意味着微软并没有投入太多精力与其他平台进行互操作. (29认同)
  • 您的评论存在缺陷,因为微软在台式机上的市场份额至少使其成为"世界所追随的". (23认同)
  • 微软在桌面设备上的市场份额至少使其成为"世界所追随的" - 有趣的是,自2009年评论以来,有多少事情发生了变化:) (21认同)
  • @deltaray [拥抱,延伸和熄灭](http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish).MS java(非标准java.util.java.security,java.io,java.lang和java.awt),Internet Explorer(几乎说'exploder')和.NET(是的,我知道他们已经发布了部分.NET的源代码,但它的许可证是限制性的,它还不是Linux端口.Mono不完整).此外,[exFAT专利](http://en.wikipedia.org/wiki/ExFAT#Restrictive_licensing_and_software_patents).你是绝对正确的. (12认同)
  • 是否符合Ubuntu POSIX标准?我正在做一个噩梦,试图编译我的Mac上编写的一些常规C99代码,以便运行Ubuntu服务器.像'usleep`这样的东西给了我错误. (2认同)
  • @NidhinDavid他们在Windows 8.1中完全删除了他们的POSIX子系统.他们不会变得更好.除了使用限制性许可打开.NET代码(特别是你不能在非.NET项目中使用它),MS做了什么来"支持开源"?最后我知道,exFAT仍然是专有的,它是大型USB驱动器和大型SD卡的新标准文件系统. (2认同)
  • 好吧,看起来他们至少使用.NET(以及其他一些项目)朝着正确的方向前进.请参阅https://github.com/Microsoft/dotnet,现在似乎包含.Net Core.一切似乎都是MIT或Apache 2许可的. (2认同)

Cir*_*四事件 467

POSIX 7定义的最重要的东西

  1. C API

    通过以下方式扩展ANSI C:

    • 更多文件操作:mkdir,dirname,symlink,readlink,link(硬链接)poll(),stat,sync,nftw()
    • 过程和线程:fork,execl,wait,semaphors pipe,共享存储器(sem_*), shm_*,调度参数(kill,nice), ,,sched_*sleepmkfifo
    • 联网: setpgid()
    • 内存管理:socket(),mmap,mlock,mprotect,madvise
    • 实用程序:正则表达式(brk())

    这些API还确定了它们所依赖的底层系统概念,例如reg*需要一个过程的概念.

    很多Linux系统调用存在实现特定的POSIX C API函数使Linux兼容的,例如fork,sys_write,...许多这些系统调用的也有特定的Linux的扩展不过.

    主要的Linux桌面实现:glibc,在很多情况下只是为系统调用提供浅层包装.

  2. CLI实用程序

    如:sys_read,cd,ls,...

    许多实用程序是用于相应C API函数的直接shell前端,例如echo.

    主要的Linux桌面实现:GNU Coreutils的为小的,独立的GNU项目为大的:mkdir,sed,grep,...一些CLI工具类猛砸实现为内置插件.

  3. Shell语言

    例如, awk

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

  4. 环境变量

    例如:a=b; echo "$a",HOME.

  5. 程序退出状态

    ANSI C表示,PATHPATH成功,PATH失败,并留下所定义的REST实现.

    POSIX补充说:

  6. 正则表达式

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

    这些由C API函数实现,并在整个CLI实用程序中使用,例如127,默认情况下接受BRE,以及使用ERE > 128.

    例如: 128 + SIGNAL_ID

    主要的Linux实现:glibc在regex.h下实现了哪些程序grep可以用作后端.

  7. 目录结构

    如:-E,echo 'a.1' | grep -E 'a.[[:digit:]]'

    Linux FHS极大地扩展了POSIX.

  8. 文件名

    • grep 是路径分隔符
    • /dev/null 不能使用
    • /tmp/,NUL父母
    • 便携式文件名
      • 最多使用14个字符和256个完整路径
      • 只能包含: .

    另请参阅:文件系统的posix合规性是什么?

  9. 命令行实用程序API约定

    不是强制性的,由POSIX使用,但几乎没有其他地方,特别是在GNU中.但事实上,它限制性太强,例如单字母标志(例如cwd),没有双连字符长版本(例如..).

    一些广泛使用的惯例:

    • a-zA-Z0-9._- 表示预期文件的stdin
    • -a终止标志,例如--all列出名为的目录-

    另请参阅:Linux命令行开关和参数是否有标准?

谁符合POSIX?

许多系统都严格遵循POSIX,但实际上很少有Open Group认证,它保持了标准.值得注意的认证包括:

  • OS X(Apple)X代表10和UNIX.是第一款Apple POSIX系统,大约在2001年发布.另请参阅:OSX是POSIX操作系统吗?
  • AIX(IBM)
  • HP-UX(HP)
  • Solaris(Oracle)

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

官方认证系统列表可在以下网址找到:https://www.opengroup.org/openbrand/register/,也可在维基页面找到.

视窗

Windows在其某些专业发行版上实现了POSIX.

由于它是一个可选功能,程序员不能依赖它来支持大多数最终用户应用程序.

Windows 8中不支持支持:

2016年,宣布了一个名为"Linux子系统Linux"的新的类似Linux的官方API.它包括Linux系统调用,ELF运行,部分--文件系统,Bash,GCC,(TODO可能是glibc?)ls -- -l等等: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的

Android拥有自己的C库(Bionic),它不支持Android O的POSIX:Android POSIX兼容吗?

奖金水平

Linux标准基础进一步扩展POSIX.

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

获取用于grepping的HTML页面的完整压缩版本: POSIX C API函数列表在哪里?

  • 很棒的例子,如果你有一个定义以及接受的答案,这将是最佳答案. (13认同)
  • @Marc谢谢!我尽量不重复其他答案中的内容,因为人们可能已经阅读过这些并避免重复;-)这是一个众所周知的困境:http://meta.stackoverflow.com/questions/305645/do-we-want - 单完整,答案?CB = 1 (6认同)
  • 文献中的所有地方都会出现对"POSIX合规性"的引用,而POSIX人员的典型定义是"一组类Unix操作系统之间的互操作性标准".尽管有用,但这个定义仍然存在很多疑问,特别是关于预期可以互操作的功能.当然,你可以去阅读整个POSIX规范来深入研究细节(并花费大量时间).但是,这个答案提供了急需的总结,以便全面了解POSIX的范围.特别感谢Ciro花时间写它! (4认同)
  • 实际解释 POSIX 涵盖的内容(以及不涵盖的内容)的好主意。 (2认同)

cle*_*tus 69

POSIX是:

POSIX(发音为/pɒzɪks/)或"便携式操作系统接口[用于Unix]" 1是IEEE指定的一系列相关标准的名称,用于定义应用程序编程接口(API),以及用于软件的shell和实用程序接口虽然该标准适用于任何操作系统,但与Unix操作系统的变体兼容.

基本上,它是一组措施,通过(大多数)常见的API和实用程序来缓解开发和使用不同版本UNIX的痛苦.有限的POSIX合规性也扩展到各种版本的Windows.

  • 我质疑使用*is*这个词,但这是值得商榷的.回答你的问题:(1)不,POSIX绝对与内核有关,它只是描述它应该如何运作; (2)OS X是BSD并且与POSIX兼容,但是有灰色区域.Windows 2008最接近POSIX投诉; 在Microsoft世界中没有相当于POSIX的东西. (4认同)
  • @Jed Smith,在Mac OS X合规方面没有灰色区域; Mac OS X经过认证,符合Single UNIX Specification v3,POSIX是其中的一个标准. (3认同)
  • 基本上,它“是”一系列缓解发展痛苦的措施。曾是?? (2认同)

Jim*_*nis 41

让我给出粗略的"非正式"解释.

POSIX是一组标准,它试图将"UNIX"和类UNIX系统与那些与它们不兼容的系统区分开来.它是由美国政府为采购目的而创建的.其想法是,美国联邦采购需要一种方法来合法地指定各种投标和合同的要求,其方式可以用于排除给定现有代码库或编程人员不可移植的系统.

由于POSIX是事后编写的......用于描述一组松散相似的竞争系统......它不是以可以实现的方式编写的.

因此,例如,Microsoft的NT编写时具有足够的POSIX一致性以符合某些出价......即使POSIX子系统在实际可移植性和与UNIX系统的兼容性方面基本上没用.

几十年来,已经编写了各种其他UNIX标准.诸如SPEC1170(指定了必须兼容的一百一十七个函数调用)和SUS(单一UNIX规范)的各种版本之类的东西.

在大多数情况下,这些"标准"不适用于任何实际的技术应用.它们最常用于论证,法律争论和其他功能失调的原因.

  • @ninjalj:编写Linux是为了实现一组实用的类UNIX函数.在符合POSIX的同时这样做非常有意义.但是,我的观点是POSIX不是作为实施新操作系统的规范而创建的......它是为美国政府采购人员区分那些符合某些类别的投标和那些不符合标准的投标而创建的. .Linux的重点是以合理的兼容性,强大性和高性能的方式提供可用的功能.POSIX在此过程中并非偶然. (8认同)
  • @fpmurphy:基于一个或两个可互操作的实现创建事后规范是IETF的标准...网络协议标准,它们通过故意松散的耦合进行交互.它并不是OS标准化的成功过程.程序和系统之间的API(内核或微内核及其子系统服务器)与客户端和服务器或网络上的对等端的耦合程度要高得多.(我不是说这是不可能的;只是指出存在差异,历史并没有表明后者是有希望的). (4认同)
  • 相当巧妙的你声称POSIX是事后写的!这是一个良好的标准制定组织(SDO)的标志,在达到至少一个符合要求的实施之前,不会达成共识. (3认同)
  • 早在 1985 年,IEEE 就指定 POSIX 的努力受到美国政府的推动。做一些研究,读一本历史书什么的。 (3认同)
  • 那么 Linux 是如何实现大部分 POSIX 的,包括许多扩展呢? (2认同)

Jed*_*ith 29

POSIX是IEEE和The Open Group提出的一套标准,描述了理想的Unix如何运作.程序员,用户和管理员都可以熟悉POSIX文档,并期望POSIX投诉Unix提供所有提到的标准工具.

由于每个Unix的工作方式都有所不同 - Solaris,Mac OS X,IRIX,BSD和Linux都有它们的怪癖 - POSIX对业界人士特别有用,因为它定义了一个标准的操作环境.例如, C库中的大多数功能都基于POSIX; 因此,程序员可以在他的应用程序中使用一个程序员,并期望它在大多数Unices中表现相同.

然而,Unix的不同领域通常是焦点,而不是标准的.

关于POSIX的好处是欢迎您自己阅读:

公开集团基本规格第7期

问题7被称为POSIX.1-2008,并且有新的东西 - 但是,用于POSIX.1的Google-fu等可以让你看到Unix背后的整个历史.

  • @Michael:鉴于你在其他答案中的评论,你显然是一个非常两极分化的人,他的意见不完全是建设性的.这个具体的评论非常迂腐,无论您选择哪种标签,我的意思都会被传达.此外,Windows在高端版本中与POSIX兼容.请呼吸,然后退后一步. (8认同)
  • 我认为您错误地使用了"UNIX"这个术语.UNIX现在引用单一UNIX规范,任何UNIX操作系统都是符合单一UNIX规范的操作系统.也许你的意思是UNIX? (2认同)

Han*_*Gay 28

POSIX是操作系统的标准,应该可以更容易地编写跨平台软件.这在Unix世界中是一个特别重要的事情.

  • 它不仅"应该"使编写跨平台代码变得更容易,它确实使编写跨平台代码变得更容易.唯一的例外是Windows,因为微软认为它比其他人更好,并且不需要遵守.但是,我预测这会对他们起作用,尤其是当Mac和Linux获得更多市场份额时.如果他们真的是为了"开发人员,开发人员,开发人员",他们会意识到开发人员需要UNIX合规性. (15认同)
  • 他们认为他们并不"比其他人更好"; 他们知道他们*比其他人都大*.这也是为什么他们会因为失去市场份额而改变自己的观点.它并不是独一无二的,例如,当Netscape不再受欢迎时,他们开始更多地关注网络标准. (6认同)
  • 根据我从比我更密切地使用它的人那里听到的消息,它可能使事情变得更容易,但对于一次写入、在任何 POSIX 上运行的印象来说,它肯定还不够。当人们听说这是操作系统的“标准”时,就会明白。 (2认同)
  • @Ken这就是为什么我们不应该让谷歌的铬变得太舒服. (2认同)

Kor*_*gay 5

1985年,来自整个计算机行业公司的个人联合起来开发了POSIX(计算机环境的可移植操作系统接口)标准,该标准主要基于UNIX System V接口定义(SVID)和其他早期的标准化工作.这些努力是由美国政府推动的,美国政府需要一个标准的计算环境来最小化其培训和采购成本.POSIX于1988年发布,是一组IEEE标准,用于定义操作系统的API,shell和实用程序接口.虽然针对类UNIX系统,但标准可适用于任何兼容的操作系统.现在这些标准已经获得认可,软件开发人员能够开发在所有符合UNIX,Linux和其他操作系统版本上运行的应用程序.

从书中:Linux的实用指南


pet*_*ica 5

Posix 更像是一个操作系统,它是一个“操作系统标准”。你可以把它想象成一个虚构的操作系统,它实际上并不存在,但它有一个文档。这些论文是“posix 标准”,由美国最大的标准组织 IEEE 定义。实现此规范的操作系统是“符合 Posix 的”。

政府法规在其投资中更喜欢符合 Posix 的解决方案,因此符合 Posix 的解决方案具有显着的财务优势,特别是对于美国的大型 IT 公司。

操作系统完全符合 posix 的奖励,即保证它将无缝编译和运行所有符合 Posix 的应用程序。

Linux 是最著名的一种。OSX、Solaris、NetBSD 和 Windows NT 也可以在这里播放。Free- 和 OpenBSD 只是“几乎”符合 Posix 标准。WinNT 的 posix 合规性只是一种避免上述政府规定的伪解决方案。


归档时间:

查看次数:

286863 次

最近记录:

6 年 前