当然プログラムを書く場合もシステムコールを中心に両者では異なってきま す。それらの差を吸収するプログラムを書くにはどうしたらよいでしょうか。 まずシステムコールやプロセス間通信のところで見たように、同じような機能 が異なった手法で実装されています。それらは互換性維持のためほとんどの機 械でどれもが実装されています。また、POSI Xという規格により、システムコー ルレベルでの互換性を持たせることによりOSが異なっても全く互換のソースを 書けるようにしようという動きがあります。それに従うのが最も合理的です。
実際にはなかなかそううまくは行きません。コンパイルするときにまず引っ 掛かるのがインクルードファイルの名前や有無でしょう。またプロトタイプが きついANSI-CやC++では引数の型の宣言の違いなど困ってしまうことがありま す。逆に言うと引数型チェックがされていない処理系でははたして正しく動く のかもっと心配になるわけですが。こういった問題を解決するには当面#ifdef などのプリプロセッサ命令を使って書かざるをえません。それぞれの機械の処 理系にはその機械やOS、コンパイラをあらわすシンボルが定義されています。 それを使って書くことになります。例えば
#ifdef sparc #include <sysent.h> #endif #ifdef ultrix ...
などとなります。どのような名前があらかじめ定義されているかどうかは、 man cppで見てください。もちろんMakefileなどの中で自分で定義することも 可能ですが。