当前位置: 首页 > news >正文

术语俗话 --- POSIX 就是 Unix 世界的普通话,大家说同一种语言就能互相理解。

术语俗话 --- POSIX 就是 Unix 世界的"普通话",大家说同一种语言就能互相理解。

简单说:POSIX 就是 Unix系统 世界的"普通话",大家说同一种语言就能互相理解。

一句话概括

POSIX 是一套"操作系统行为规范",让你写的程序能在不同 Unix-like 系统上跑起来。


用生活举例

想象不同品牌的插座:

text
中国插座  美国插座  欧洲插座
  ‖         |        /\
  ‖         |       /  \

每个国家标准不一样,电器换个国家就没法用。

POSIX 就是定义了一个"统一插座标准",厂商按这个标准造插座,电器就到哪都能用。


具体来说

历史背景

text
1970s-1980s:
Unix 诞生后,各公司拿去魔改
  ├── AT&T Unix
  ├── BSD Unix  
  ├── HP-UX
  ├── AIX
  └── ...

问题:同样功能,各家实现不一样
     程序换个系统就得重写 😤

POSIX 做了什么

IEEE 组织出来说:"大家都按我这个标准来!"

规定了比如:

功能POSIX 规定
列出文件 ls 命令必须支持 -l -a 参数
读写文件 open() read() write() 函数的行为
进程操作 fork() exec() 怎么工作
文件路径 用 / 分隔,.. 表示上级目录

谁遵守 POSIX?

text
完全遵守 ✅        部分遵守 ⚠️          不遵守 ❌
─────────────    ──────────────────    ──────────
macOS            Linux(大部分兼容)    Windows(自己一套)
各商业 Unix       Android
                 WSL(兼容层模拟)

为什么 Windows 不一样?

Windows 自己搞了一套:

  • 路径用 \ 而不是 /
  • 文件 API 完全不同(CreateFile 而不是 open
  • 没有 fork()

所以 Linux 程序不能直接在 Windows 跑,反之亦然。

WSL(Windows Subsystem for Linux)本质上就是微软帮你做了个"POSIX 翻译层"


程序员视角

C
// 遵守 POSIX 的写法
// 这段代码在 Linux / macOS / Unix 上都能编译运行 ✅

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

int main() {
    int fd = open("test.txt", O_RDONLY);  // POSIX 标准函数
    char buf[100];
    read(fd, buf, 100);                   // POSIX 标准函数
    close(fd);                            // POSIX 标准函数
    return 0;
}

总结

问题答案
POSIX 是什么 操作系统接口的统一标准
谁制定的 IEEE(电气电子工程师协会)
规定了什么 命令行工具、C语言API、文件系统规则等
好处是什么 写一次代码,多个系统能跑
谁不遵守 Windows(有自己的标准)