36.12. posixfile —ロックをサポートするファイルのようなオブジェクト—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/posixfile
移動先:案内検索

36.12。 posixfile —ロックをサポートするファイルのようなオブジェクト

バージョン1.5以降非推奨:このモジュールが提供するロック操作は、 fcntl.lockf()呼び出しによってより適切かつ移植性が高くなります。


このモジュールは、組み込みのファイルオブジェクトにいくつかの追加機能を実装します。 特に、ファイルロック、ファイルフラグの制御、およびファイルオブジェクトを複製するための簡単なインターフェイスを実装しています。 このモジュールは、新しいファイルオブジェクトであるposixfileオブジェクトを定義します。 すべての標準ファイルオブジェクトメソッドがあり、以下に説明するメソッドが追加されています。 このモジュールは、ファイルロックに fcntl.fcntl()を使用するため、特定の種類のUnixでのみ機能します。

posixfileオブジェクトをインスタンス化するには、 posixfile.open()関数を使用します。 結果のオブジェクトは、標準のファイルオブジェクトとほぼ同じ外観と感触になります。

posixfile モジュールは、次の定数を定義します。

posixfile.SEEK_SET
オフセットはファイルの先頭から計算されます。
posixfile.SEEK_CUR
オフセットは、ファイル内の現在の位置から計算されます。
posixfile.SEEK_END
オフセットはファイルの終わりから計算されます。

posixfile モジュールは、次の関数を定義します。

posixfile.open(filename[, mode[, bufsize]])
指定されたファイル名とモードで新しいposixfileオブジェクトを作成します。 filenamemode 、および bufsize 引数は、組み込みの open()関数と同じように解釈されます。
posixfile.fileopen(fileobject)
指定された標準ファイルオブジェクトを使用して、新しいposixfileオブジェクトを作成します。 結果のオブジェクトは、元のファイルオブジェクトと同じファイル名とモードになります。

posixfileオブジェクトは、次の追加メソッドを定義します。

posixfile.lock(fmt[, len[, start[, whence]]])
ファイルオブジェクトが参照しているファイルの指定されたセクションをロックします。 形式については、以下の表で説明します。 len 引数は、ロックする必要のあるセクションの長さを指定します。 デフォルトは0です。 start は、セクションの開始オフセットを指定します。デフォルトは0です。 whence 引数は、オフセットが相対的な場所を指定します。 定数 SEEK_SETSEEK_CUR 、または SEEK_END のいずれかを受け入れます。 デフォルトは SEEK_SET です。 引数の詳細については、システムの fcntl(2)のマニュアルページを参照してください。
posixfile.flags([flags])
ファイルオブジェクトが参照しているファイルに指定されたフラグを設定します。 特に指定がない限り、新しいフラグは古いフラグとOR演算されます。 形式については、以下の表で説明します。 flags 引数がない場合、現在のフラグを示す文字列が返されます(これは、?修飾子と同じです)。 フラグの詳細については、システムの fcntl(2)のマニュアルページを参照してください。
posixfile.dup()
ファイルオブジェクトと、基になるファイルポインタおよびファイル記述子を複製します。 結果のオブジェクトは、新しく開かれたかのように動作します。
posixfile.dup2(fd)
ファイルオブジェクトと、基になるファイルポインタおよびファイル記述子を複製します。 新しいオブジェクトには、指定されたファイル記述子が含まれます。 それ以外の場合、結果のオブジェクトは、新しく開かれたかのように動作します。
posixfile.file()
posixfileオブジェクトの基になっている標準ファイルオブジェクトを返します。 これは、標準のファイルオブジェクトを要求する関数で必要になる場合があります。

リクエストが失敗すると、すべてのメソッドでIOErrorが発生します。

lock()メソッドのフォーマット文字には、次の意味があります。

フォーマット 意味
u 指定されたリージョンのロックを解除します
r 指定されたセクションの読み取りロックを要求します
w 指定されたセクションの書き込みロックを要求します

さらに、次の修飾子をフォーマットに追加できます。

修飾子 意味 ノート
ロックが付与されるまで待ちます
? 要求されたロックと競合する最初のロックを返すか、競合がない場合はNoneを返します。 (1)

ノート:

  1. 返されるロックの形式は(mode, len, start, whence, pid)です。ここで、 mode は、ロックのタイプ( 'r'または 'w')を表す文字です。 この修飾子は、リクエストが許可されないようにします。 クエリのみを目的としています。

flags()メソッドのフォーマット文字には、次の意味があります。

フォーマット 意味
a フラグのみを追加
c execフラグで閉じる
n 遅延フラグなし(非ブロッキングフラグとも呼ばれます)
s 同期フラグ

さらに、次の修飾子をフォーマットに追加できます。

修飾子 意味 ノート
! デフォルトの「オン」ではなく、指定されたフラグを「オフ」にします。 (1)
= デフォルトの「OR」演算の代わりにフラグを置き換えます (1)
? 文字が設定されているフラグを表す文字列を返します。 (2)

ノート:

  1. !および=修飾子は相互に排他的です。
  2. この文字列は、同じ呼び出しによって変更された可能性のあるフラグを表します。

例:

import posixfile

file = posixfile.open('testfile', 'w')
file.lock('w|')
...
file.lock('u')
file.close()