C API
通过以下方式扩展ANSI C:
这些API还确定了它们所依赖的底层系统概念,例如fork需要一个过程的概念。
很多Linux系统调用存在实现特定的POSIX C API函数使Linux兼容的,例如sys_write,sys_read,...许多这些系统调用的也有特定的Linux的扩展不过。
主要的Linux桌面实现:glibc,在很多情况下只是为系统调用提供浅层包装。更多文件操作:mkdir,dirname,symlink,readlink,link(硬链接)poll(),stat,sync,nftw()
过程和线程:fork,execl,wait,pipe,semaphors sem_*,共享存储器(shm_*), kill,调度参数(nice,sched_*), ,,sleepmkfifosetpgid()
联网: socket()
内存管理:mmap,mlock,mprotect,madvise,brk()
实用程序:正则表达式(reg*)
CLI实用程序
如:cd,ls,echo,...
许多实用程序是用于相应C API函数的直接shell前端,例如mkdir。
主要的Linux桌面实现:GNU Coreutils的为小的,独立的GNU项目为大的:sed,grep,awk,...一些CLI工具类猛砸实现为内置插件。
Shell语言
例如, a=b; echo "$a"
主要的Linux桌面实现:GNU Bash。
环境变量
例如:HOME,PATH。
PATH 指定了搜索语义,包括斜杠如何阻止PATH搜索。
程序退出状态
ANSI C表示,0或EXIT_SUCCESS成功,EXIT_FAILURE失败,并留下所定义的REST实现。
POSIX补充说:126:找到命令但不可执行。
127: 没有找到指令。
> 128:由信号终止。
但是POSIX似乎没有指定128 + SIGNAL_IDBash使用的规则: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。
文件名
另请参阅:文件系统的posix合规性是什么?最多使用14个字符和256个完整路径
只能包含: a-zA-Z0-9._-/ 是路径分隔符
NUL 不能使用
.是cwd,..父母
便携式文件名
命令行实用程序API约定
不是强制性的,由POSIX使用,但几乎没有其他地方,特别是在GNU中。但事实上,它限制性太强,例如单字母标志(例如-a),没有双连字符长版本(例如--all)。
一些广泛使用的惯例:
另请参阅:Linux命令行开关和参数是否有标准?- 表示预期文件的stdin
--终止标志,例如ls -- -l列出名为的目录-l
“POSIX ACL”(访问控制列表),例如用作后端setfacl。
这已被撤销,但它已在多个操作系统中实现,包括在Linux中setxattr。
谁符合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中不支持支持:
Microsoft Windows的7 POSIX实现目前在哪里?
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子系统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之上添加了更多功能。
Android的
Android拥有自己的C库(Bionic),它不支持Android O的POSIX:Android POSIX兼容吗?
奖金水平
在Linux标准基础进一步扩展POSIX。
使用非帧索引,它们更具可读性和可搜索性:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
获取用于grepping的HTML页面的完整压缩版本: POSIX C API函数列表在哪里?