2016-12-20 19 views
3

私は、POSIX準拠の2つのオペレーティングシステム、つまりQNXとLinuxの間で共有されるPOSIX互換のコードを書こうとしています。POSIX関数の戻り値

私は、関数の戻り値の指定に小さな違いがあることを見出しました。 pthread_mutex_trylock()。あるドキュメントはEOK(それは0と評価されます)を返します。もう1つは、成功した場合には平文0を返します。

戻り値== 0または!= 0を安全に確認し、QNX EOKマクロを使用しないでください。

私の質問:

  1. POSIXは、明示的に成功および/またはエラーの場合には関数によって返さされなければならない値を定義していますか?
  2. 厳密に言えば、EOK0ではない)を返すように指定された関数です。POSIXに準拠していますか?
  3. EOKは標準の一部ですか?
+0

この質問は純粋な学問です。まず第一に、Posixはバイナリ互換性に関するものではなく、ソースコードとの互換性に関するものです。 'EOK'はposixで指定されておらず、上記の関数は成功すると' 0'を返さなければならないので、ここで定数0を使うのは安全です。私は 'EOK'を含む標準を知らない。 – Ctx

+0

@Ctx:ソースの互換性が問題です。 EOKはその互換性を(不必要に)破るようです。あなたのコメントが私の質問に答えたので、とにかくそれを実際の答えにしてみませんか? – Silicomancer

答えて

3
  1. は、関数のPOSIX定義が何であるかを見つけるためにそれらを相談し、POSIXマニュアルページがあります。例:http://www.unix.com/man-page/all/3posix/pthread_mutex_trylock/。一般に、POSIXは非常に一貫しており、戻り値が成功または失敗を通知するためにのみ使用されるすべての場合において、0は成功を意味します。
  2. EOK0の場合、QNXの実装はPOSIX準拠です。しかし、すでに述べたように、コード内で0を使用して、すべてのプラットフォームでコンパイルするようにしてください。
  3. 私が知る限り、プラットフォームに依存しない標準の一部ではありません。あなたがそれを避けるか、またはEOKがもっと明白だと信じるなら、プログラムでこれを書くことができます:

#ifndef EOK 
#define EOK 0 
#endif