1

Iman -a closeの場合、最初のページが POSIX の man ページでclose(2)、(2 はシステム API またはカーネル機能を意味します) があります。これは、少なくとも 2 つのバージョンのclose().

たとえば、次のようなコードです。

int fd = open("xxx");
........
close(fd);   -----here, which version is called,
                  is that one from the POSIX lib, or the raw system API?

PS: したがって、私の Linux システムには、ほとんどのシステム API 呼び出し用の POSIX ラッパーが含まれています。私のコードが POSIX lib または元のシステム API を呼び出しているかどうかを識別する方法は?

4

2 に答える 2

5

POSIX はライブラリではなく、標準です。マニュアルページの POSIX バージョンは、POSIX 標準が関数が行うべきこと (およびそのページが基づいている POSIX のバージョン) を示しています。このページで説明されている動作のみに依存する場合、コードは POSIX 標準を実装するすべてのシステムで動作するはずです (最新の十分なバージョンを実装している限り)。

Linux バージョンのマンページには、関数がシステムで実際に何をするかが示されています。ほとんどの場合、ここで説明されている動作は POSIX ページで説明されている動作のスーパーセットになります。つまり、Linux の動作は POSIX 標準に準拠しますが、POSIX で定義されていないケースを定義したり、関数が受け入れたりする場合もあります。 POSIX で義務付けられていない追加オプション。

POSIX で指定されていない動作に依存している場合、コードは Linux システムでのみ動作する可能性があります。

于 2012-06-29T06:45:22.213 に答える
3

「これは、少なくとも 2 つのバージョンの close() があることを意味します。」

いいえ。これは、閉じるためのドキュメントの 2 つのバージョンがあることを意味します。

于 2012-06-29T06:32:08.753 に答える