8.11 標準モジュール posixfile

  

注意: このモジュールは、将来のリリースでは使われなくなるでしょう。 ロック操作は、より良く、移植性に富んだ fcntl.lockf() コールにより 提供されています。  

このモジュールには、組み込みの file オブジェクトに比べて、いくつかの追加機能が 実装されています。特に、ファイルロック、ファイルフラグの制御、file オブジェクト を複製するための簡単なインターフェースが実装されています。 このモジュールには、新しい file オブジェクトである posixfile オブジェクトが 定義されています。このオブジェクトは、標準の file オブジェクトのメソッドと、 以下に示す追加メソッドを持っています。このモジュールは、ファイルロックのために fcntl.fcntl() を使うので、ある種の Unix 上でしか動作しません。  

posixfile オブジェクトを作成するためには、posixfile モジュールの open() 関数を使用します。作成されたオブジェクトは、標準の file オブジェクトとだいたい同じように感じられます。

posixfile モジュールには、以下の定数が定義されています。

SEEK_SET
オフセットが、ファイルの先頭から計算されます。

SEEK_CUR
オフセットが、ファイルのカレント位置から計算されます。

SEEK_END
オフセットが、ファイルの末尾から計算されます。

posixfile モジュールには、以下の関数が定義されています。

open (filename[, mode[, bufsize]])
与えられたファイル名とモードで、新しい posixfile オブジェクトを作成します。 引数 filenamemode、および bufsize は、組み込み open() 関数と同じように解釈されます。

fileopen (fileobject)
与えられた標準の file オブジェクトから、新しい posixfile オブジェクトを作成 します。作成されるオブジェクトは、基になる file オブジェクトと同じファイル名と モードを持ちます。

posixfile オブジェクトには、以下の追加メソッドが定義されています。

lock (fmt, [len[, start[, whence]]])
file オブジェクトが参照しているファイルの、指定された部分をロックします。 フォーマットは、以下の表で説明しています。引数 len は、ロックする 部分の長さを指定します。デフォルト値は 0 です。start は、 ロックする部分の先頭位置のオフセットを指定します。デフォルト値は 0 です。引数 whence は、オフセットの基準位置を指定します。指定可能な 定数は、SEEK_SETSEEK_CUR、または SEEK_END の中の いずれかです。デフォルト値は、SEEK_SET です。引数に関するさらに詳しい 内容については、システムの fcntl(2) のマニュアルページを参照してくだ さい。

flags ([flags])
file オブジェクトが参照しているファイルに、指定されたフラグを設定します。 新しいフラグの値はその他の指定が無ければ、古いフラグの値と OR 演算されます。 フォーマットは、以下の表で説明しています。引数 flags を指定しない場合は、 カレントのフラグを示す文字列が返されます。(これは、修飾子 "?" を指定 した場合と同じです。)フラグに関するさらに詳しい内容については、システムの fcntl(2) のマニュアルページを参照してください。

dup ()
file オブジェクトを、その中のファイルポインター、ファイル記述子も含めて複製 します。作成されたオブジェクトは、新たにファイルをオープンした場合と同様に 扱うことができます。

dup2 (fd)
file オブジェクトを、その中のファイルポインター、ファイル記述子も含めて複製 します。新しいオブジェクトは、与えられたファイル記述子を持ちます。それ以外は、 作成されたオブジェクトは、新たにファイルをオープンした場合と同様に扱うことが できます。

file ()
posixfile オブジェクトに基づいた標準の file オブジェクトを返します。これは、 標準の file オブジェクトを引数とする関数を、呼び出す時に必要な場合があります。

全てのメソッドは、要求が失敗すると IOError をあげます。

lock() メソッドのためのフォーマット文字は、以下のものを 意味しています。

フォーマット 意味
u 指定された範囲のロックを解除
r 指定部分の読み込みロックを要求
w 指定部分の書き込みロックを要求

さらに、以下の修飾子をフォーマットに付加することができます。

修飾子 意味 注意
| ロックが許可されるまで待ちます
? 要求したロックが最初に衝突した時のロックの情報を返します。ただし、 衝突が起こっていない場合は、None を返します。 (1)

Note:

(1) 返されるロックのフォーマットは、(mode, len, start, whence, pid) です。ここで、mode は、ロックのタイプを 表す文字('r' または 'w')です。この修飾子は問い合わせの目的で使用するだけで、 実際に要求が許可されることはありません。

flags() のためのフォーマット文字は、以下のものを意味しています。

フォーマット 意味
a 追加フラグ
c 実行時クローズ(呼び出しプロセスでオープンしていたファイルを、サブ プロセスではクローズ状態にする)フラグ
n 遅延無しフラグ(非ブロックフラグとも呼ばれます)
s 同期フラグ

さらに、以下の修飾子をフォーマットに付加することができます。

修飾子 意味 注意
! 指定したフラグを’オフ’にします。この修飾子を付けない場合はフラグを ’オン’にします。 (1)
= フラグを置き換えます。この修飾子を付けない場合は’OR’演算が行われ ます。 (1)
? 現在設定されているフラグを表す文字を返します。 (2)

注意:

(1) 修飾子 "!" と "=" は、どちらか一方しか指定できません。

(2) 返される文字列は、同じコールで変更されたフラグの変更後の値を表します。

例:

import posixfile

file = posixfile.open('/tmp/test', 'w')
file.lock('w|')
...
file.lock('u')
file.close()

guido@python.org