什么是POSIX?我已阅读 Wikipedia 文章,并且每次遇到该术语时都会阅读它。事实是我从来没有真正理解它是什么。
任何人都可以通过解释“对 POSIX 的需要”来向我解释吗?
原文由 claws 发布,翻译遵循 CC BY-SA 4.0 许可协议
什么是POSIX?我已阅读 Wikipedia 文章,并且每次遇到该术语时都会阅读它。事实是我从来没有真正理解它是什么。
任何人都可以通过解释“对 POSIX 的需要”来向我解释吗?
原文由 claws 发布,翻译遵循 CC BY-SA 4.0 许可协议
POSIX 7 定义的最重要的事情
极大地 扩展了 ANSI C ,例如:
mkdir
, dirname
, symlink
, readlink
, link
(hardlinks), poll()
, stat
, sync
, nftw()
fork
, execl
, wait
, pipe
, semaphors sem_*
, shared memory ( shm_*
), kill
, scheduling parameters ( 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
,…由 Bash 实现 为 built-ins 。
例如, a=b; echo "$a"
主要的 Linux 桌面实现: GNU Bash 。
例如: HOME
, PATH
。
PATH
指定搜索语义,包括 斜线如何防止 PATH
搜索。
ANSI C 表示 0
或 EXIT_SUCCESS
表示成功, EXIT_FAILURE
表示失败,并保留定义的其余实现。
POSIX 补充说:
126
:找到命令但不可执行。
127
:找不到命令。
> 128
:由信号终止。
但是POSIX似乎没有指定Bash使用的 128 + SIGNAL_ID
规则: 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
的后端。
这 已被撤回,但已在多个操作系统中实现,包括 在 Linux 中使用 setxattr
。
谁符合 POSIX?
许多系统都严格遵循 POSIX,但实际上很少有系统得到维护该标准的 Open Group 的认证。著名的认证包括:
大多数 Linux 发行版都非常合规,但没有经过认证,因为他们不想支付合规检查。 浪潮的 K-UX 和 华为的 EulerOS 就是两个经过认证的例子。
认证系统的官方列表可在以下网址找到: https ://www.opengroup.org/openbrand/register/ 以及 wiki 页面。
视窗
Windows 在其一些专业发行版上实现了 POSIX。
由于它是一项可选功能,因此程序员无法将其用于大多数最终用户应用程序。
Windows 8 中已弃用支持:
2016 年,宣布了一个名为“Windows Subsystem for 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 API 功能”,但要求您“如果您希望它在 Windows 上运行,则从源代码重新构建您的应用程序”。 MSYS2 是一个相关项目,似乎在 Cygwin 之上添加了更多功能。
如果您需要的 POSIX 中唯一的东西是命令行实用程序,还请考虑: https ://github.com/shelljs/shelljs 它在 Node.js 中重新实现了一堆 CLI 实用程序,它已经基本上实现了可移植性层对于更简单的系统调用,如 mkdir
等。许多人在他们的项目的 package.json
中使用该项目,以允许在 Windows 上运行该项目。当然,它需要用户安装 Node.js 运行时,但鉴于 Node.js 的流行,我不认为它会很快崩溃/难以满足。
安卓
Android 有自己的 C 库(仿生),从 Android O 开始不完全支持 POSIX: Android POSIX 兼容吗?
奖金等级
Linux 标准库 进一步扩展了 POSIX。
使用非框架索引,它们更具可读性和可搜索性:http: //pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
获取用于 grepping 的 HTML 页面的完整压缩版本: POSIX C API 函数列表在哪里?
原文由 Ciro Santilli OurBigBook.com 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答798 阅读✓ 已解决
2 回答3.2k 阅读
POSIX 是 IEEE 指定的一系列标准,用于阐明和统一 Unix-y 操作系统提供的应用程序编程接口(以及辅助问题,例如命令行 shell 实用程序)。
当您编写依赖于 POSIX 标准的程序时,您可以很肯定地能够轻松地将它们移植到一大类 Unix 衍生产品(包括 Linux,但不限于它!);如果并且当您使用一些未作为 Posix 的一部分标准化的 Linux API 时,如果您希望将来将该程序或库移植到其他 Unix-y 系统(例如 MacOSX),您将遇到困难。