ftrylockfile() - stdio ロッキング

標準

標準/拡張機能 C/C++ 依存項目

Single UNIX Specification、バージョン 3

両方  z/OS V1R8

形式

#define _UNIX03_SOURCE 
#include <stdio.h>

int ftrylockfile(FILE *file);

機能説明

この関数により、明示的なアプリケーション・レベルの stdio (FILE*) オブジェクトのロッキングができます。この flockfile() ファミリーの各関数は、1 単位として実行される入出力ステートメントのシーケンスを表すのにスレッドが使用します。

ftrylockfile() 関数が指定する (FILE*) オブジェクトが使用可能である場合、(FILE*) オブジェクトのスレッドに対して所有権が与えられ、内部ロック・カウントが増加します。 そのスレッドが以前に所有権を取得していた場合、内部ロック・カウントは増加します。 別のスレッドが所有権を取得している場合、ftrylockfile() は呼び出しスレッドに所有権を与えず、非ゼロ値を戻します。 ftrylockfile() は、flockfile() の非ブロッキング・バージョンです。

内部ロック・カウントにより、flockfile() (または正常に終了した ftrylockfile()) および funlockfile() へのマッチング呼び出しをネストすることが可能になります。

z/OS® に関する考慮事項: flockfile() ファミリーの関数は、FILE * オブジェクトに基づいて機能します。同等として認識されていない複数の FILE * オブジェクトによって表される同じ物理ファイルを持つことが可能です。 例えば、fopen() がファイルをオープンし、open() が同じファイルをオープンし、fdopen() は FILE * オブジェクトを作成します。 この場合、最初の FILE * をロッキングしても 2 番目の FILE * がロックされて使用されることを妨げることはありません。

戻り値

ftrylockfile() 関数は正常終了の場合にゼロを戻し、ロックを取得できなかったことを示す場合に非ゼロを戻します。
エラー・コード
定義
EBADF
入力 (FILE *) オブジェクトが無効です。
EBUSY
入力 (FILE *) オブジェクトは、別のスレッドがロックしています。
注: デッドロック (またはループ) を防ぐことは、アプリケーションの責任です。 例えば、デッドロック (またはループ) が起こるのは、(FILE *) オブジェクトがクローズされるか、スレッドが終了してからすべてのロックされた (FILE *) オブジェクトを解放する場合です。

関連情報