POSIXとは何ですか?私はWikipediaの記事を読んだことがあり、その用語に出会うたびにそれを読みました。実は私はそれが何であるかを本当に理解したことはありません。
「POSIXの必要性」についても説明してください。
POSIXとは何ですか?私はWikipediaの記事を読んだことがあり、その用語に出会うたびにそれを読みました。実は私はそれが何であるかを本当に理解したことはありません。
「POSIXの必要性」についても説明してください。
回答:
POSIXは、Unix-yオペレーティングシステムによって提供されるアプリケーションプログラミングインターフェイス(およびコマンドラインシェルユーティリティなどの付随的な問題)を明確にして統一するために、IEEEによって指定された標準ファミリです。POSIX標準に依存するようにプログラムを作成すると、Unix派生製品の大きなファミリー(Linuxを含むがそれに限定されない!)間でそれらを簡単に移植できることが確実になります。Posixの一部として標準化されていない一部のLinux APIを使用する場合、将来そのプログラムまたはライブラリを他のUnix-yシステム(MacOSXなど)に移植する場合、困難が生じます。
Microsoft's market share on desktops, at least, makes it "what the world follows"
-2009年のこのコメント以降、どれだけ多くのことが変更されたかに注目してください:)
POSIX 7が定義する最も重要なこと
mkdir
、dirname
、symlink
、readlink
、link
(ハードリンク)、 、poll()
、、stat
sync
nftw()
fork
、execl
、wait
、pipe
、semaphors sem_*
、共有メモリ(shm_*
)kill
、スケジューリングパラメータ(nice
、sched_*
)、 、、sleep
mkfifo
setpgid()
socket()
mmap
、mlock
、mprotect
、madvise
、brk()
reg*
)これらのAPIは、それらが依存する基礎となるシステムの概念も決定fork
します。たとえば、プロセスの概念が必要です。
多くのLinuxシステムコールは、例えば、特定のPOSIX C API関数を実装し、Linux対応をするために存在しsys_write
、sys_read
...これらのシステムコールの多くは、しかし、Linux固有の拡張を持っています。
主要なLinuxデスクトップの実装:glibc。多くの場合、システムコールに浅いラッパーを提供します。
例えば:cd
、ls
、echo
、...
多くのユーティリティは、対応するC API関数の直接シェルフロントエンドですmkdir
。
主要なLinuxデスクトップの実装:小さなもののためにGNUのCoreutilsは、大きなもののために別々のGNUプロジェクト:sed
、grep
、awk
、...いくつかのCLIユーティリティは、バッシュで実装されている組み込み関数として。
例えば、 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を受け入れ、でEREを受け入れます-E
。
例えば: echo 'a.1' | grep -E 'a.[[:digit:]]'
主要なLinux実装:glibcは、プログラムがバックエンドとして使用できるregex.hの下の関数を実装していますgrep
。
例:/dev/null
、/tmp
Linux FHSはPOSIXを大幅に拡張します。
/
パスセパレーターですNUL
使用できません.
はcwd
、..
親ですa-zA-Z0-9._-
必須ではありません。POSIXで使用されていますが、他にはほとんどありません。特にGNUでは使用されていません。しかし、真実であり、制限が厳しすぎます。たとえば、1文字のフラグのみ(例-a
:)、2つのハイフンの長いバージョン(例:)はありません--all
。
広く使用されているいくつかの規則:
-
ファイルが予期される標準入力を意味します--
フラグを終了します。たとえばls -- -l
、次の名前のディレクトリをリストします。-l
「POSIX ACL」(アクセス制御リスト)。たとえば、のバックエンドとして使用されますsetfacl
。
これは取り下げられましたが、Linux withsetxattr
を含むいくつかのOSに実装されました。
誰がPOSIXに準拠していますか?
多くのシステムはPOSIXに厳密に従っていますが、実際には、標準を維持するOpen Groupによって認定されているシステムはほとんどありません。注目の認定されたものは次のとおりです。
ほとんどのLinuxディストリビューションは非常に準拠していますが、準拠性の確認を望まないため、認定されていません。InspurのK-UXとHuaweiのEulerOSは、2つの認定された例です。
認定システムの公式リストは、https://www.opengroup.org/openbrand/register/およびwikiページにあります。
ウィンドウズ
Windowsは、一部のプロフェッショナルディストリビューションにPOSIXを実装しました。
これはオプション機能であるため、プログラマはほとんどのエンドユーザーアプリケーションでこの機能に依存できませんでした。
サポートはWindows 8で廃止されました:
2016年に、「Linux用のWindowsサブシステム」と呼ばれる新しいLinuxのような公式APIが発表されました。これは、ELFは、実行中の部品、Linuxのシステムコールが含まれ/proc
、ファイルシステム、バッシュ、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は、Windowsに「実質的なPOSIX API機能を提供する」ことで有名なGPLサードパーティプロジェクトですが、「Windowsで実行する場合は、ソースからアプリケーションを再構築する」必要があります。MSYS2は、Cygwinにさらに機能を追加するように見える関連プロジェクトです。
アンドロイド
Androidには独自のCライブラリ(Bionic)があり、Android Oの時点でPOSIXを完全にはサポートしていません。AndroidPOSIX互換ですか?
ボーナスレベル
Linuxの標準ベースはさらにPOSIXを拡張します。
非フレームインデックスを使用してください。これらははるかに読みやすく、検索可能です。http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
grepping用のHTMLページの完全な圧縮バージョンを取得します。POSIXC API関数のリストはどこにありますか?
POSIXは次のとおりです。
POSIX(/ ˈpɒzɪks /と発音)または「Portable Operating System Interface [Unix]」1は、ソフトウェアのシェルおよびユーティリティインターフェイスとともに、アプリケーションプログラミングインターフェイス(API)を定義するためにIEEEによって指定された関連規格のファミリの名前です。標準はどのオペレーティングシステムにも適用できますが、Unixオペレーティングシステムのバリアントと互換性があります。
基本的には、(ほとんど)共通のAPIとユーティリティを使用することで、UNIXのさまざまなフレーバーの開発と使用の苦痛を緩和するための一連の対策でした。限定されたPOSIX準拠もさまざまなバージョンのWindowsに拡張されました。
堅苦しい「非公式」の説明をさせてください。
POSIXは、「UNIX」およびUNIXライクなシステムと互換性のないシステムを区別しようとする一連の標準です。調達目的で米国政府によって作成されました。その考えは、米国の連邦調達には、特定の既存のコードベースやプログラミングスタッフが移植できないシステムを除外するために使用できる方法で、さまざまな種類の入札や契約の要件を法的に指定する方法が必要だったというものです。
POSIXは事後的に書かれていたので、大まかに似ている競合システムのセットを説明するために...実装可能な方法で書かれていませんでした。
したがって、たとえば、MicrosoftのNTは、いくつかの入札に適格となるのに十分なPOSIX準拠で書かれています...たとえPOSIXサブシステムは、実用的な移植性とUNIXシステムとの互換性の点で本質的に役に立たなかったとしても。
UNIXの他のさまざまな標準が数十年にわたって作成されてきました。SPEC1170(互換性のある方法で実装する必要のある1171の関数呼び出しを指定)のようなものや、SUS(Single UNIX Specification)のさまざまな化身。
ほとんどの場合、これらの「標準」は実際の技術的アプリケーションには不十分でした。それらは、議論、法的論争、およびその他の機能不全の理由で最も存在します。
POSIXは、クロスプラットフォームソフトウェアの作成を容易にするためのオペレーティングシステムの標準です。これはUnixの世界では特に大きな問題です。
POSIXは、理想的なUnixがどのように動作するかを記述した、IEEEおよびThe Open Groupによって策定された一連の標準です。プログラマー、ユーザー、および管理者はすべてPOSIXドキュメントに慣れ、POSIX準拠のUnixが前述の標準機能をすべて提供することを期待できます。
すべてのUnixの動作は少し異なります-Solaris、Mac OS X、IRIX、BSD、およびLinuxにはすべて癖があります-POSIXは、動作する標準環境を定義しているため、業界の人々にとって特に有用です。たとえば、 Cライブラリのほとんどの関数はPOSIXに基づいています。したがって、プログラマは自分のアプリケーションで1つ使用して、ほとんどのUnicesで同じように動作することを期待できます。
ただし、Unixの分岐領域は、標準的な領域ではなく、通常、焦点となっています。
POSIXのすばらしいところは、自分で読んでもかまわないということです。
第7号はPOSIX.1-2008と呼ばれ、新しいものがあります。ただし、POSIX.1などのGoogle-fuを使用すると、Unixの背後にあるすべての履歴を確認できます。
1985年、コンピュータ業界全体の企業の個人が参加して、主にUNIX System Vインターフェイス定義(SVID)やその他の以前の標準化の取り組みに基づいたPOSIX(コンピュータ環境用ポータブルオペレーティングシステムインターフェイス)標準を開発しました。これらの取り組みは、トレーニングと調達コストを最小限に抑えるための標準的なコンピューティング環境を必要とした米国政府によって促進されました。1988年にリリースされたPOSIXは、オペレーティングシステムのAPI、シェル、およびユーティリティインターフェイスを定義するIEEE標準のグループです。標準はUNIXライクなシステムを対象としていますが、互換性のあるすべてのオペレーティングシステムに適用できます。これらの基準が受け入れられた今、ソフトウェア開発者は、UNIX、Linux、およびLinuxのすべての準拠バージョンで実行されるアプリケーションを開発できます。
本から:Linuxの実践ガイド
PosixはOSとしてよりも、 "OS標準"です。実際には存在しない架空のOSとして想像できますが、ドキュメントがあります。これらの論文は、米国の大きな標準組織であるIEEEによって定義された「posix標準」です。この仕様を実装するOSは「Posix準拠」です。
政府の規制は、投資においてPosix準拠のソリューションを好むため、Posix準拠であることは、特に米国の大規模IT企業にとって、財務上の大きな利点があります。
OSがposixに完全に準拠していることに対する報酬は、すべてのPosix準拠のアプリケーションをシームレスにコンパイルして実行できることを保証するものです。
Linuxは最もよく知られているものです。OSX、Solaris、NetBSDおよびWindows NTもここで再生されます。FreeおよびOpenBSDは、「ほぼ」Posixに準拠しているだけです。WinNTのposix準拠は、上記の政府規制を回避するための疑似ソリューションにすぎません。
POSIXはPortable Operating System Interfaceの略で、アプリケーションの移植性を促進するために設計されたIEEE規格です。POSIXは、ベンダーのコンソーシアムによる、UNIXの単一の標準バージョンを作成する試みです。
Posixは、相互運用性、移植性、およびフォークの使用とメカニズム、許可、および/ etc、/ var、/ usrなどのファイルシステム標準などの他の領域を管理しますます。そのため、開発者がLinuxなどのPosix準拠システムでプログラムを作成する場合、IBMのAIXシステムや他のUnixの商用バリアントなど、別のposix準拠システムでの実行が保証されているとは限りません。Posixは、ソフトウェアの開発を容易にし、移植性を最大限に引き出すのに適しています。この答えが理にかなっているといいのですが。
エラーを指摘してくれたJed SmithとTinkertimに感謝します。:(
それほど明るくないPOSIXに関するいくつかの事実。
POSIXはシステムコールインターフェイスまたはAPIでもあり、30年近く経過しています。
単一のCPUを搭載した単一のコンピューターを使用して、ローカルストレージへのシリアル化されたデータアクセス用に設計されました。
セキュリティはPOSIXの設計では大きな懸念事項ではなかったため、長年にわたって数多くの競合状態攻撃が発生し、プログラマーはこれらの制限を回避する必要がありました。
深刻なバグはまだ発見されており、より安全なPOSIX API設計で回避できた可能性のあるバグです。
POSIXは、ユーザーが一度に1つの同期呼び出しを発行し、その結果を待ってから次の呼び出しを発行することを期待しています。今日のプログラマーは、全体的なスループットを向上させるために、一度に多くの非同期要求を発行することを期待しています。
この同期APIは、高レイテンシが問題となるリモートオブジェクトやクラウドオブジェクトへのアクセスには特に適していません。