##
7.5.1 ファイルオブジェクト (file object)

Python の組み込みファイルオブジェクトは、全て標準 C ライブラリの `FILE*` サポートの上に実装されています。以下の詳細説明は 一実装に関するもので、将来の Python のリリースで変更されるかも しれません。

`PyFileObject`
  この `PyObject` のサブタイプは Python のファイル型オブジェクトを 表現します。

PyTypeObject `PyFile_Type`
  この `PyTypeObject` のインスタンスは Python のファイル型を 表現します。このオブジェクトは `types.FileType` として Python プログラムで公開されています。

int `PyFile_Check`( | PyObject *p)

  引数が `PyFileObject` か `PyFileObject` のサブタイプのときに真を返します。 バージョン2.2 以降で変更された 仕様: サブタイプを引数にとれるようになりました

int `PyFile_CheckExact`( | PyObject *p)

  引数が `PyFileObject` 型で、かつ `PyFileObject` 型のサブタイプでないときに真を返します。 バージョン2.2 以降で新規追加された 仕様です。

PyObject* `PyFile_FromString`( | char *filename, char *mode)

  戻り値: 新たな参照.
  成功すると、filename に指定した名前のファイルを mode に 指定したファイルモードで開いて得た新たなファイルオブジェクトを返します。 mode のセマンティクスは標準 C ルーチン `fopen()`と同じです。失敗すると`NULL`を返します。

PyObject* `PyFile_FromFile`( | FILE *fp, char *name, char *mode, int (*close)(FILE*))

  戻り値: 新たな参照.
  すでに開かれている標準 C ファイルポインタ fp から 新たな `PyFileObject` を生成します。この関数で生成した ファイルオブジェクトは、閉じる際にclose に指定した関数を 呼び出します。失敗すると`NULL`を返します。

FILE* `PyFile_AsFile`( | PyFileObject *p)

  p に関連付けられたファイルオブジェクトを `FILE*` で返します。

PyObject* `PyFile_GetLine`( | PyObject *p, int n)

  戻り値: 新たな参照.
  `p.readline([n])` と同じで、この関数は オブジェクト p の各行を読み出します。 p は ファイルオブジェクトか、`readline()` メソッドを持つ 何らかのオブジェクトでかまいません。n が `0` の場合、 行の長さに関係なく正確に 1 行だけ読み出します。n が `0` より大きければ、n バイト以上のデータは 読み出しません; 従って、行の一部だけが返される場合があります。 どちらの場合でも、読み出し後すぐにファイルの終端に到達した場合には 空文字列を返します。n が `0` より小さければ、長さに 関わらず 1 行だけを読み出しますが、すぐにファイルの終端に到達した 場合には `EOFError` を送出します。

PyObject* `PyFile_Name`( | PyObject *p)

  戻り値: 借りた参照.
  p に指定したファイルの名前を文字列オブジェクトで 返します。

void `PyFile_SetBufSize`( | PyFileObject *p, int n)

  `setvbuf()`があるシステムでのみ 利用できます。この関数を呼び出してよいのはファイルオブジェクトの 生成直後のみです。

int `PyFile_Encoding`( | PyFileObject *p, char *enc)

  Unicode オブジェクトをファイルに出力するときにのエンコード方式を enc にします。成功すると `1` を、失敗すると `0` を返します。 バージョン2.3 以降で新規追加された 仕様です。

int `PyFile_SoftSpace`( | PyObject *p, int newflag)

  この関数はインタプリタの内部的な利用のために存在します。 この関数はp の `softspace` 属性を newflag に 設定し、以前の設定値を返します。この関数を正しく動作させるために、 p がファイルオブジェクトである必然性はありません; 任意の オブジェクトをサポートします (`softspace` 属性が設定 されているかどうかのみが問題だと思ってください)。 この関数は全てのエラーを解消し、属性値が存在しない場合や属性値を 取得する際にエラーが生じると、`0` を以前の値として返します。 この関数からはエラーを検出できませんが、そもそもそういう必要は ありません。

int `PyFile_WriteObject`( | PyObject *obj, PyFileObject *p, int flags)

  オブジェクト obj をファイルオブジェクト p に書き込みます。 flag がサポートするフラグは `Py_PRINT_RAW` だけです; このフラグ を指定すると、 オブジェクトに`repr()` ではなく `str()` を適用した結果をファイルに書き出します。 成功した場合には `0` を返し、失敗すると `-1` を返して 適切な例外をセットします。

int `PyFile_WriteString`( | const char *s, PyFileObject *p)

  文字列 s をファイルオブジェクト p に書き出します。 成功した場合には `0` を返し、失敗すると `-1` を返して 適切な例外をセットします。