だから私は簡単なテストをしました
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main (int argc, char *argv[]) {
printf("Hello World\n");
printf("%d\n",getpid());
}
oSX10.9.5プリントを実行している私のmacbookproでgccを使用してコンパイル
Hello World
640
ほとんどのLinuxディストリビューションでそうなると思います。 darwinカーネルがUNIXに基づいていることは知っていますが、すべてのLinuxシステムコールはOSXでもUbuntuとまったく同じように動作しますか? (pidは、実行するたびに異なることを認識していますが、それは私がここで実際に話していることではありません)。 SSDの小さなパーティションにもUbuntuをインストールしているので、答えが「いいえ」の場合は問題ありません。
getpid()
を「Linuxシステムコール」と呼ぶのは誤解を招くと思います。それはLinux -specificシステムコールであるという印象を与えますが、そうではありません。実際、getpid()
および他の多くのシステムコールはPOSIXによって指定されており、LinuxとMacOSの両方、および他の多くのシステムに同じ動作で実装されています。
一般的なソフトウェアで使用するシステムコールの大部分、またはCライブラリ関数でさえ、POSIXやANSI Cなどの標準によって指定されており、多くの異なるオペレーティングシステムで同じ動作で実装されます。ポータブルソフトウェアは、広く利用可能なこの一連の一般的なシステムコールと関数を維持するソフトウェアです。
Linuxには、Linux固有のシステムコールもあります。 MacOSには、MacOS固有のシステムコールもあります。明らかに、どちらも反対のオペレーティングシステムでは機能しません。このようなシステムコールのマンページは、通常、移植性がないという事実を示しています。さらに、それらは低レベルの実装の詳細として頻繁に存在し、ほとんどのソフトウェアはそれらを使用する必要がないため、ほとんどのソフトウェアを移植可能に保つことが容易になります。
OS Xは 認定UNIXオペレーティングシステム であり、POSIX標準の実装を保証します。 Linuxは、認定されたUNIXではありませんが、POSIX標準も実装しています。 API呼び出しをPOSIXの一部であるものに制限する場合、OSXとLinuxの間で一貫した動作が必要です。 POSIXの他に、C標準ライブラリも標準化されており、コンパイラとプラットフォーム間で同じ動作をする必要があります(標準に準拠している限り)。
Linuxのgetpid(2)
manページには、POSIX.1-2001、4.3BSD、およびSVr4に準拠していると記載されています。 OS X 10.10の同じマニュアルページには、POSIX.1-1988に準拠していると書かれています。