# `posix` --- 最も一般的な POSIX システムコール群

このモジュールはオペレーティングシステムの機能のうち、C 言語標準および (Unix インタフェースをほんの少し隠蔽した) POSIX 標準で標準化されている機能に対するアクセス機構を提供します。

このモジュールを直接インポートしてはいけません。 その代わりに、このインターフェースの ポータブル 版である `os` モジュールをインポートしてください。 Unix では、`os` モジュールは `posix` インターフェースのスーパーセットを提供しています。非 Unix オペレーティングシステムでは、 `posix` モジュールは利用できませんが、その一部分は `os` インターフェースを通して常に利用可能です。一度 `os` をインポートし `posix` の代わりにそれを使えば、パフォーマンス上の代償は ありません 。加えて `os` は、 `os.environ` の要素が変更されたときに `putenv()` を呼び出すなどの追加の機能も提供します。

エラーは例外として報告されます; よくある例外は型エラーです。一方、システムコールから報告されたエラーは以下に述べるように `OSError` を送出します。

## ラージファイルのサポート

いくつかのオペレーティングシステム (AIX, HP-UX, Irix および Solaris が含まれます) は、 `int` および `long` を 32 ビット値とする C プログラムモデルで 2GB を超えるサイズのファイルのサポートを提供しています。このサポートは典型的には関連するサイズとオフセットの組合せを 64-bit 値として定義することで実現しています。このようなファイルは時にラージファイル (large files) と呼ばれます。

Python では、 `off_t` のサイズが `long` より大きく、かつ `long long` が少なくとも `off_t` と同じくらい大きなサイズであるとき、ラージファイルのサポートが有効になります。 この場合、ファイルのサイズ、オフセットおよび Python の通常整数型の範囲を超えるような値の表現には Python の長整数型が使われます。 このモードを有効にするのに、 configure で Python のコンパイルに特定のコンパイルフラグを必要とするかもしれません。 例えば、ラージファイルのサポートは Irix の最近のバージョンでは標準で有効ですが、Solaris 2.6 および 2.7 では、以下のようにする必要があります:

    CFLAGS="`getconf LFS_CFLAGS`" OPT="-g -O2 $CFLAGS" \
            ./configure

ラージファイル対応の Linux システムでは、以下のようにすれば良いでしょう:

    CFLAGS='-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' OPT="-g -O2 $CFLAGS" \
            ./configure

## 注目すべきモジュールの内容

`os` モジュールのドキュメントで説明されている多数の関数に加え、 `posix` では以下のデータ項目を定義しています:

`posix.``environ`

  インタプリタが起動したときの環境を表す文字列辞書です。キーと値は Unix ではバイト列、 Windows では文字列です。例えば、 `environ[b'HOME']` (Windows では `environ['HOME']`) はホームディレクトリのパス名で、 C の `getenv("HOME")` と同じ値です。

  この辞書を編集しても、 `execv()` 、 `popen()` 、 `system()` で渡された環境変数文字列には影響は与えません; 環境変数を変更したい場合は、 `environ` を `execve()` に渡すか、変数への代入文と export 文を `system()` や `popen()` に渡すコマンド文字列に追加してください。

  バージョン 3.2 で変更: Unix ではキーと値はバイト列になりました。

  注釈

  `os` モジュールでは、もう一つの `os.environ` 実装を提供しており、環境変数が変更された場合、その内容を更新するようになっています。 `environ` を更新した場合、この辞書は古い内容を表していることになってしまうので、このことにも注意してください。 `posix` モジュール版を直接アクセスするよりも、 `os` モジュール版を使う方が推奨されています。