POSIX は、Unix-y オペレーティング システムによって提供されるアプリケーション プログラミング インターフェイス (およびコマンドライン シェル ユーティリティなどの補助的な問題) を明確にし、統一するために、IEEE によって指定された一連の標準です。 POSIX 標準に依存するようにプログラムを作成すると、大規模な Unix 派生ファミリ (Linux を含むが、これに限定されません!) 間で簡単に移植できることはほぼ間違いありません。 Posix の一部として標準化されていない Linux API を使用する場合、将来、そのプログラムまたはライブラリを他の Unix-y システム (MacOSX など) に移植する場合、およびその時期が難しくなります。
POSIX 7 が定義する最も重要なこと
<オール>C API
次のようなもので ANSI C を大幅に拡張します:
- その他のファイル操作:
mkdir
、dirname
、symlink
、readlink
、link
(ハードリンク)、poll()
、stat
、sync
、nftw()
- プロセスとスレッド:
fork
、execl
、wait
、pipe
、セマフォsem_*
、共有メモリ (shm_*
)、kill
、スケジューリング パラメータ (nice
、sched_*
)、sleep
、mkfifo
、setpgid()
- ネットワーキング:
socket()
- メモリ管理:
mmap
、mlock
、mprotect
、madvise
、brk()
- ユーティリティ:正規表現 (
reg*
)
これらの API は、それらが依存する基本的なシステムの概念も決定します。 fork
プロセスの概念が必要です。
特定の POSIX C API 関数を実装し、Linux に準拠させるために、多くの Linux システム コールが存在します。 sys_write
、 sys_read
, ... ただし、これらのシステムコールの多くには Linux 固有の拡張機能もあります。
主要な Linux デスクトップ実装:glibc。多くの場合、システム コールに浅いラッパーを提供するだけです。
CLI ユーティリティ
例:cd
、 ls
、 echo
、...
多くのユーティリティは、対応する C API 関数のダイレクト シェル フロント エンドです。 mkdir
.
主な Linux デスクトップ実装:小さいものは GNU Coreutils、大きいものは別の GNU プロジェクト:sed
、 grep
、 awk
, ... 一部の CLI ユーティリティは Bash によって組み込みとして実装されています。
シェル言語
例:a=b; echo "$a"
主要な Linux デスクトップ実装:GNU Bash。
環境変数
例:HOME
、 PATH
.
PATH
スラッシュがどのように PATH
を防ぐかを含め、検索セマンティクスが指定されています 探す。
プログラムの終了ステータス
ANSI C は 0
と言います または EXIT_SUCCESS
成功の場合、EXIT_FAILURE
失敗した場合は残りの実装を定義したままにします。
POSIX の追加:
-
126
:コマンドは見つかりましたが、実行できません。 -
127
:コマンドが見つかりません。 -
> 128
:シグナルで終了します。しかし、POSIX は
128 + SIGNAL_ID
を指定していないようです Bash で使用されるルール:https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated
正規表現
BRE (基本) と ERE (拡張) の 2 種類があります。 Basic は非推奨であり、API を壊さないようにするためだけに残されています。
これらは C API 関数によって実装され、CLI ユーティリティ全体で使用されます。 grep
デフォルトで BRE を受け入れ、-E
の ERE を受け入れます .
例:echo 'a.1' | grep -E 'a.[[:digit:]]'
主要な Linux 実装:glibc は grep
のようなプログラムを作成する regex.h の下に関数を実装します。 バックエンドとして使用できます。
ディレクトリ構造
例:/dev/null
、 /tmp
Linux FHS は POSIX を大幅に拡張します。
ファイル名
/
はパス区切りですNUL
使用できません.
cwd
です 、..
親- 移植可能なファイル名
- 最大 14 文字、フル パスには最大 256 文字を使用してください
- 次のもののみを含めることができます:
a-zA-Z0-9._-
関連項目:ファイルシステムの posix 準拠とは?
コマンド ライン ユーティリティの API 規則
必須ではなく、POSIX で使用されていますが、他の場所ではほとんど使用されておらず、特に GNU では使用されていません。しかし、それは制限が厳しすぎるのも事実です。 1 文字のフラグのみ (例:-a
)、二重ハイフンの長いバージョン (例:--all
).
いくつかの広く使用されている規則:
-
ファイルが期待される stdin を意味します--
フラグを終了します。ls -- -l
-l
という名前のディレクトリを一覧表示するには
関連項目:Linux コマンド ライン スイッチと引数の標準はありますか?
「POSIX ACL」(アクセス制御リスト)。 setfacl
のバックエンドとして使用 .
これは撤回されましたが、setxattr
の Linux を含むいくつかの OS で実装されました。 .
POSIX に準拠しているのは誰ですか?
多くのシステムは POSIX に厳密に従っていますが、標準を維持している Open Group によって実際に認定されているシステムはほとんどありません。認定された注目すべきものは次のとおりです。
- OS X (Apple) X は、10 と UNIX の両方を表します。 2001 年頃にリリースされた最初の Apple POSIX システムです。参照:OSX は POSIX OS ですか?
- AIX (IBM)
- HP-UX (HP)
- Solaris (オラクル)
ほとんどの Linux ディストリビューションは非常に準拠していますが、準拠チェックに支払いたくないため認定されていません。 Inspur の K-UX と Huawei の EulerOS は、認定された 2 つの例です。
認定システムの公式リストは、https://www.opengroup.org/openbrand/register/ および wiki ページにあります。
窓
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 用 Windows サブシステム」と呼ばれる新しい公式の 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 には独自の C ライブラリ (Bionic) があり、Android O の時点で POSIX を完全にはサポートしていません:Android POSIX と互換性がありますか?
ボーナスレベル
Linux Standard Base は POSIX をさらに拡張します。
非フレーム インデックスを使用すると、読みやすく検索しやすくなります:http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
grep 用の HTML ページの完全な圧縮バージョンを入手してください:POSIX C API 関数のリストはどこにありますか?
POSIX は:
<ブロック引用>POSIX (発音は /ˈpɒzɪks/) または「Portable Operating System Interface [for Unix]」1 は、アプリケーション プログラミング インターフェイス (API) を定義するために IEEE によって指定された関連する標準のファミリーの名前であり、Unix のバリアントと互換性のあるソフトウェアのシェルおよびユーティリティ インターフェイスも含まれます。ただし、標準はどのオペレーティング システムにも適用できます。
基本的には、(ほとんど) 共通の API とユーティリティを使用することで、さまざまなフレーバーの UNIX の開発と使用の苦痛を軽減するための一連の手段でした。制限付きの POSIX 準拠も、さまざまなバージョンの Windows に拡張されています。