POSIX

POSIX 是一套用来统一类 Unix 操作系统接口的标准,完整名称是 Portable Operating System Interface(可移植操作系统接口)

它主要规定:操作系统应该向程序提供哪些接口、这些接口的名字是什么、参数怎么传、行为应该怎样。这样,同一份程序就更容易在不同的 Unix/Linux 系统之间移植。

例如,POSIX 会定义很多常见接口和行为:

  • 文件操作:open()read()write()close()
  • 进程管理:fork()exec()wait()
  • 线程:pthread_create()、互斥锁、条件变量等
  • 文件系统概念:路径、权限、文件描述符
  • 信号机制:signalsigaction
  • Shell 和命令行工具的基本行为,例如 shgrepawksed

一个典型的 POSIX 程序可能这样读文件:

#include <unistd.h>
#include <fcntl.h>

int fd = open("test.txt", O_RDONLY);

char buf[100];
ssize_t n = read(fd, buf, sizeof(buf));

close(fd);

这里的 open()read()close() 都属于典型的 POSIX 接口。

为什么需要 POSIX?

假设没有统一标准,不同系统可能会各自定义完全不同的 API:

Linux:      read_file(...)
Unix A:     get_file_data(...)
Unix B:     file_read(...)

那么开发者每支持一个操作系统,就可能要重新写一套代码。

POSIX 相当于规定了一套共同语言:

程序
  ↓
POSIX API
  ↓
┌─────────┬─────────┬─────────┐
 Linux     macOS     Unix
└─────────┴─────────┴─────────┘

因此经常会看到类似:

“这个程序是 POSIX-compatible。”

意思通常是:它尽量只使用 POSIX 标准规定的接口,因此比较容易移植到不同的类 Unix 系统。

POSIX 和 Linux / Unix 是什么关系?

POSIX 不是操作系统,而是一套标准。

可以大致理解成:

Unix         → 一类操作系统传统
POSIX        → 定义这些系统应该提供哪些标准接口
Linux        → 大量支持 POSIX 接口
macOS        → 大量支持 POSIX,并且是 Unix 系统
Windows      → 原生 API 体系不同,主要是 Win32 / NT API

所以程序员说:

“POSIX 系统”

通常就是泛指 Linux、macOS、BSD 等拥有大量 POSIX 接口的系统。

还有一个容易混淆的点:“支持 POSIX 接口”不一定等于“通过了正式的 POSIX 认证”。Linux 实际上实现了大量 POSIX 行为,但不同发行版、库和版本可能还有扩展或细微差异。

如果你在学 Linux/C/C++,可以把 POSIX 简单记成一句话:

POSIX = Linux/Unix 世界里的一套通用操作系统 API 规范。

posted @ 2026-09-16 16:30  光風霽月  阅读(5)  评论(0)    收藏  举报