Linux システムは OSX で C を呼び出します。

Linux システムは OSX で C を呼び出します。

だから簡単にテストしてみました

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main (int argc, char *argv[]) {
        printf("Hello World\n");
        printf("%d\n",getpid());
}

OSX 10.9.5を実行しているMacbook Proでgccを使用したコンパイルと印刷

Hello World
640

予想通り、ほとんどのLinuxディストリビューションで動作します。私はdarwinカーネルがUNIXに基づいていることを知っていますが、すべてのLinuxシステムコールはUbuntuと同じようにOSXでもまったく同じように動作しますか? (PIDが異なり、実行するたびに異なることを知っていますが、実際にここでは言うものではありません。)SSDの小さなパーティションにUbuntuをインストールしたので、答えが「いいえ」であれば問題ありません。

答え1

getpid()私はそれを「Linuxシステムコール」と呼ぶことが誤解を招くと言いたいと思います。これはLinux-という印象を与えます。特定システムコールですが、そうではありません。実際、getpid()POSIXは他の多くのシステムコールを指定し、LinuxやMacOS、他の多くのシステムでも同じ動作で実装されていることがわかります。

一般的なソフトウェアで使用されるほとんどのシステムコール、さらにはCライブラリ機能もPOSIXやANSI Cなどの標準によって指定され、さまざまなオペレーティングシステムで同じ動作で実装されています。ポータブルソフトウェアは、広く利用可能な共通のシステムコールおよび機能セットを維持するソフトウェアである。

LinuxにはLinux関連のシステムコールもあります。 MacOSには、MacOS専用のシステムコールもあります。明らかに、これらのいずれも反対のオペレーティングシステムで実行されていません。これらのシステムコールのマンページには一般に移植性がないと述べられています。さらに、これは低レベルの実装詳細で存在することが多く、ほとんどのソフトウェアはそれを使用する必要がないため、ほとんどのソフトウェアは移植性を維持するのが簡単です。

答え2

OS Xは認証されたUNIXオペレーティングシステム、POSIX標準を実装していることを確認してください。 LinuxはUNIX認証を受けていませんが、POSIX標準を実装しています。 API呼び出しをPOSIXの一部に制限する場合は、OS XとLinuxの間に一貫した動作が必要です。 POSIXに加えて、C標準ライブラリは標準化されており、標準に準拠している限り、コンパイラとプラットフォーム間で同じ動作をする必要があります。

Linuxのマニュアルページには、getpid(2)POSIX.1-2001、4.3BSD、およびSVr4と互換性があると記載されています。 OS X 10.10 の同じマニュアルページは、POSIX.1-1988 に準拠していることが示されています。

関連情報