技术: Posix标准一览

集中认识Unix, BSD, SUS, LSB以及 POSIX 各种理论东西.

简介

我曾经在学习系统编程的时候,发现各种不同的调用时,总是要涉及标准(man page),
当时其实是不在意的,因为不知道有啥区别, 打个比方:man wait

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
NAME
wait, waitpid, waitid - wait for process to change state

SYNOPSIS
#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *wstatus);

pid_t waitpid(pid_t pid, int *wstatus, int options);

int waitid(idtype_t idtype, id_t id, siginfo_t *infop, int options);
/* This is the glibc and POSIX interface; see
NOTES for information on the raw system call. */

Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

waitid():
_XOPEN_SOURCE
|| /* Since glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE

上面的 200809L 就是指的一个标准。

详解

Posix

POSIX,即Portable Operating System Interface,可移植操作系统接口。IEEE最初开发POSIX标准,是为了提高UNIX环境下应用程序的可移植性。然而POSIX并不局限于UNIX。许多其它操作系统,例如DEC OpenVMS和Microsoft Windows NT都支持POSIX标准。

POSIX现在已经发展成为一个非常庞大的标准族,某些部分正处于开发过程中。POSIX定义了一个接口,而非一种实现,所以并不区分系统调用和库函数。标准中所有的例程都是宏和函数。POSIX接口连接了OS和应用程序。符合POSIX接口的OS和应用程序可以无缝交流。

Linux基本逐步上实现了POSIX兼容,但并没有参加正式的POSIX认证。如Linux的线程实现版本和POSIX标准之间还是存在着细微的差别,最明显的是关于信号处理部分。微软的Windows NT至少部分实现了POSIX兼容。
(下面只谈论Posix1. 而不谈论Posix2.,因为用的少)

SUSv3,Berkerly,BSD

200809L就是指的一个标准,一般是指SUSv4或者POSIX.1-2008 (可以理解成同一标准的两种称谓)。
一般系统编程(或者在Linux下进行开发),为了兼容不同的Linux或者Unix系统,就要看看这些标准;个人把SUSv3或者POSIX.1-2001视为主流标准(遵循这个标准的函数/系统调用封装函数,一般可以随便用而不用担心兼容性问题, 因为类nix系统一般遵循POSIX标准)

不管类nix中有都多少名称,例如BSD啊,Berkerly啊,抓住POSIX标准就可以了。因为平台太多,没精力逐个对付啊;看下boost是怎么在定义的平台:
boost_platform
补充,你看看CPP这些宏是怎么定义的,来看一下Boost怎么定义的
__cplus

LSB

Linux Standard Base,为什么会有一个Linux标准?
因为Linux本质上和Unix相同,但是发展到后面也是存在差别的,特别是Linux会有自己的许多方便的定义。
(包括像系统调用,不同系统提供的系统调用服务例程或者实现方式不一样)

但是,你可以把LSB看做是POSIX和SUS的超集(父集),就像Linux的IPC通信,既借鉴了System V的“Shared Memory”, “Semaphore”, “Message Queues”, 又借鉴了Berkerly的“Signals, Pipes”。


需要了解更多么?谁知道呢?

参考

  1. 《Unix/Linux系统编程手册(上册)》 chapter 1

总结

这是我在Linux系统编程时曾经遇到的问题,个人因为觉得烦不过,就草草的翻看了一下理论;
总的来说,你不用去看wiki了,核心的遵循一下POSIX1.2001或者比较新的POSIX1.2008即可

文章目录
  1. 简介
  2. 详解
    1. Posix
    2. SUSv3,Berkerly,BSD
    3. LSB
  3. 参考
  4. 总结
|