2 に答える
posix 標準ではないものはすべて、追加のシステム コールであるか、システム コール レイヤーの上の追加のライブラリ機能である可能性があります。移植可能なコードを書くことが目標である場合は、posix に固執し、(直接のシステム コールとは対照的に) C ライブラリをできるだけ使用します。
興味があるだけなら、それらは非常に大きく異なります。posixに準拠するために、システムコールの方法で多くをサポートする必要はありません. サポートする必要があるインターフェイスを指定しますが、カーネルを呼び出すか、共有ライブラリにジャンプするかは、ほとんどあなた次第です。
Mac OS X は、リリース間のシステム コールのバイナリ互換性さえ保証しておらず、システム ライブラリと OS の間のプライベート インターフェイスと見なしています。ほとんどの人がシステム コールと考えているのは、実際にはカーネルを呼び出す動的ライブラリ内の小さなスタブです。その動的ライブラリにリンクしてスタブ関数を呼び出すのではなく、システム コールを直接行うと、コードが OS 間で壊れる可能性があります。リリースします。
その柔軟性は、多くの OS が posix をサポートするために必要なものとはまったく異なるシステム コールを実装し、ライブラリの違いに対処することを意味します。たとえば、Linux のスレッド化の実装は、clone() と呼ばれるシステム コールに基づいており、ライブラリで pthreads インターフェイスを機能させるために多くの簿記を処理します。
そのため、他のものとはリンクせず、複数の UNIX で動作する標準ライブラリを実装することが目標である場合、場合によっては少し扱いにくいことがあります。さまざまな Unix の標準ライブラリにリンクするものを作成することが目標である場合は、一般的に統一されたインターフェイスを取得できます。
私が見つけることができる最高のものは、さまざまなシステムコールのバリエーションについて、 Solaris syscallsと比較するためのUnix-Linux-BSD Cheat-Sheetsです。
Unix だけでも、「システム コール」の意味にもよりますが、システム コールの数は多かれ少なかれ 4 倍になりました。
Advanced UNIX Programming の初版では、open、read、write など、約 70 の本物のカーネル システム コールのみに焦点を当てていました。ただし、fopen、fread、fwrite などのライブラリ呼び出しは除きます。
第 2 版には約 300 が含まれています (全部で約 1,100 の標準関数呼び出しがありますが、それらの多くは標準 C ライブラリの一部であるか、明らかにカーネル機能ではありません)。
今日の UNIX には、スレッド、リアルタイム シグナル、非同期 I/ O、および新しいプロセス間通信機能 (POSIX IPC) (20 年前には存在しなかったもの)