fcntl 呼び出し可能サービスは、オープン・ファイルの生成制御機能を実行します。これは、ファイル記述子フラグ、 ファイル状況フラグ、ロック情報、およびファイル・タグを検索したり設定したりします。 この呼び出し可能サービスは、ファイル内のテキスト・データの自動変換も制御します。
| 操作 | 環境 |
|---|---|
| 許可: | 監視プログラム状態または問題プログラム状態、任意の PSW キー |
| ディスパッチ可能単位モード: | タスク |
| 仮想記憶間モード: | PASN = HASN |
| AMODE (BPX1FCT): | 31 ビット |
| AMODE (BPX4FCT): | 64 ビット |
| ASC モード: | 1 次アドレス・スペース制御 (ASC) モード |
| 割り込み状況: | 割り込み可能 |
| ロック: | アンロック状態 |
| 制御パラメーター: | すべてのパラメーターは、呼び出し元からアドレスできるようになっていなければならず、 また 1 次アドレス・スペース内に存在していなければなりません。 |
|
AMODE 64 の呼び出し元は BPX4FCT を使用しますが、指定するパラメーターは同じです。 ただし、AMODE 64 呼び出し元の場合、Argument パラメーターは、Action パラメーター に応じて、64 ビット・ポインターでも、4 バイト値でもかまいません。
ファイルのファイル記述子が入るフルワードの名前です。 このパラメーターは、オープンされているファイル記述子を指定しなければなりません。 ただし、Action パラメーターが F_CLOSFD になっている場合は例外です。 この場合は、ファイル記述子が使用されていないと想定されます。
BPXYFCTL マクロでマップされる整数値が 1 つ入っているフルワードの名前であり、実行するアクションを示します。 アクションのリストについては、BPXYFCTL - fcntl のコマンド値およびフラグを参照してください。
F_SETLK、F_GETLK、F_SETLKW、F_SETTAG、または F_CONTROL_CVT を使用する AMODE 64 呼び出し元の場合、Argument は 64 ビット・ポインターです。 F_SETLK、F_GETLK、F_SETLKW、F_SETTAG、または F_CONTROL_CVT を使用する AMODE 31 呼び出し元の場合、Argument は 31 ビット・ポインターです。
Action が F_DUPFD ならば、fcntl は、 オープン・ファイルに既に関連のない File_descriptor_2 と同等かそれよりも大きい、 最も低いファイル記述子を戻します。 File_descriptor は複製されます。
Action が F_DUPFD2 ならば、戻されるファイル記述子は、File_descriptor_2 と同等です。 File_descriptor_2 は、それが既に使用中であれば、クローズされます。 F_CLOEXEC はクリアされます。
File_descriptor は複製されます。 File_descriptor が File_descriptor_2 と同等であると、F_DUPFD2 アクションは、File_descriptor_2 クローズしないで戻します。 F_CLOEXEC はクリアされません。
Action が F_CLOSFD であれば、File_descriptor_2 は、 クローズするファイル記述子の範囲に上限を指定し、 File_descriptor は下限を指定します。 -1 が File_descriptor_2 に指定されていると、下限よりも大きいか等しいファイル記述子はすべてクローズされます。
File_descriptor_flags を取得するには、アクション F_GETFD を指定します。 アクションが成功すると、Return_value は、File_descriptor_flags のビット設定にマップされます。
ファイル記述子フラグは、BPXYFCTL マクロによりマップされます。BPXYFCTL - fcntl のコマンド値およびフラグを参照してください。
File_status_flags を取得するには、アクション F_GETFL を指定します。 アクションが成功すると、Return_value は、File_status_flags のビット設定にマップされます。
同様に File_status_flags を設定するには、 アクション F_SETFL を指定して、File_status_flags を必要な値に設定またはリセットするマッピングを使用します。 Action が F_SETFL のときに設定されるのは、O_ASYNCSIG、 O_APPEND、 O_NONBLOCK および O_SYNC フラグのみです。 指定されているその他のどんなフラグも無視されます。
ファイル状況フラグを使用して、BPXYOPNF マクロによりマップされるオープン・フラグの幾つかを設定します。 ファイル状況フラグのマッピングについては、BPXYOPNF - open のフラグ値をマップする を参照してください。
F_GETFL 要求からの戻り値と一緒に 2 つのマスクが使用できます。 O_ACCMODE マスクを使用すると、戻り値からファイル・アクセス・モード・フラグを抽出できます。 また、O_GETFL マスクを使用すると、ファイル・アクセス・モード・フラグと ファイル状況フラグの両方を抽出できます。
| ワード | 説明 |
|---|---|
| 0 | l_type: 0-1 バイトには、設定、クリア、または照会されるロックのタイプを 指定します。詳しくは、『使用上の注意』の『ファイル・ロック』を参照してください。 |
| 0 | l_whence: 2-3 バイトには、ロック・オフセットの決定方法を指定します。 詳しくは、『使用上の注意』の『ファイル・ロック』を参照してください。 |
| 1–2 | l_start には、設定、クリア、または照会されるロックの開始バイト・オフセットを指定します。 これは、ダブルワード値です。 |
| 3–4 | l_len には、設定、クリア、または照会されるバイト範囲の長さを指定します。 これは、ダブルワード値です。 |
| 5 | l_pid: F_GETLK 要求からの戻り時に、 ブロッキング・ロックを保持しているプロセスのプロセス ID が検出された場合、 それがこのフィールドに入っています。 |
すべてのソケットには、関連したプロセス・グループ番号が付いていて、番号はゼロに初期設定されています。 これを設定するには、fcntl サービスを呼び出して、F_SETOWN アクションを指定します。 この値は、w_ioctl 呼び出し可能サービスを使用して設定することもできます。 F_SETOWN の Argument 値は、 プロセス ID を指定する場合は正の整数を取り、 プロセス・グループ ID を指定する場合は負の整数 (-1 は除く) を取ることができます。 F_GETOWN コマンドは、ソケットに関連したプロセス ID またはプロセス・グループ ID を戻り値に戻します。 プロセス ID の指定とグループ ID の指定の違いは、 前者の場合は、単一プロセスだけがシグナルを受け取るのに対して、 後者の場合は、プロセス・グループ内のすべてのプロセスがシグナルを受け取るという点です。 F_SETOWN および F_GETOWN アクションは、AF_INET ストリーム・ソケットでのみ使用可能です。
Action が F_SETTAG の場合、fcntl サービスはファイル用ファイル・タグ属性を 設定します。そのファイルは、通常、FIFO、またはキャラクター型スペシャル・ファイルである必 要があり、書き込みモードで開かなければなりません。 ファイルは空でなければなりません。 ファイルが空でなく、DeferTag ビットが設定されていると、コマンドが作動済みと 仮定されて、エラーは戻されず、処理も発生しません。これによって、呼び出し元は ファイル・サイズのチェックなしに F_SETTAG を発行できるようになります。 ただし、エラーにはなりません。 既にタグが付けられていて、開かれたタグを設定するために F_SETTAG を使用すると、O_TRUNC は無視されます。
DeferTag ビットがオフの場合、ファイル・タグは即時に設定されます。 DeferTag ビットがオンの場合、ファイル・タグの設定は、BPX1WRT (BPX4WRT) への呼び出しにより 最初の書き込みが行われるまで据え置かれます。書き込みが何も行われず、 そのファイルがクローズされると、ファイル・タグが脱落します。書き込み障害が 発生した場合、ファイルのタグ付けが発生する場合と発生しない場合があります。 ファイルが FIFO ファイルまたはパイプ・ファイルの場合、ファイル・タグの設定は、最初の読 み取り (BPX1RED/BPX4RED) または最初の書き込み (BPX1WRT/BPX4WRT) (どちらか先に 行われる方) が行われるまで据え置かれます。 これは、ブロック化が使用可能になっている場合、空のファイルに対しても読み取りが書 き込みより先に実行できるからです。
このファイルが /dev/null、/dev/random、/dev/urandom、 または /dev/zero の場合、ファイル・タグはディスクに書き込まれません。
Action が F_CONTROL_CVT の場合、fcntl サービスは、オープンされたファイルが 読み込み (BPX1RED または BPX4RED 経由) 時または書き出し (BPX1WRT または BPX4WRT 経由) 時の 発生する変換の仕方を制御します。そのファイルは、通常、FIFO、またはキャラクター型スペシャル・ファイルである 必要があります。
ファイル CCSID 用の 16 進数値 0 は、現行の設定値が変更されない ことを示します。この値は、格納するファイル・タグまたはプログラム CCSID に影響しません。 この値はこのデータ・ストリーム上で変換を制御するのに使用される値を 変更するだけです。
ThliCcsid の設定または参照は 依然として有効ですが、推奨されません。
| 処置 | 引数 | Return_value |
|---|---|---|
| F_CLOSFD | File_descriptor_2 | 0 |
| F_CONTROL_CVT | F_CVT | 0 |
| F_DUPFD | File_descriptor_2 | File_descriptor |
| F_DUPFD2 | File_descriptor_2 | File_descriptor |
| F_GETFD | 0 | File_descriptor_flags |
| F_GETFL | 0 | File_status_flags |
| F_GETLK | Lock_information | Lock_information |
| F_GETOWN | 0 | Pid |
| F_SETFD | File_descriptor_flags | 0 |
| F_SETFL | File_status_flags | 0 |
| F_SETLK | Lock_information | 0 |
| F_SETLKW | Lock_information | 0 |
| F_SETOWN | Pid | 0 |
| F_SETTAG | File_Tag | 0 |
| Return_code | 説明 |
|---|---|
| EAGAIN | 呼び出しプロセスが、ロックの設定を依頼しましたが、 このロックは、 別のプロセスによって既に設定されているファイルの重複部分のロックと競合しています。 |
| EBADF | 以下の理由のいずれかが原因で、要求は受け入れられませんでした。
戻りコードに、JRFdTooBig という理由コードが伴う場合があります。 |
| EDEADLK | 要求されたアクションが F_SETLKW で、デッドロックの可能性があることが分かりました。 |
| EINTR | F_SETLKW 要求を処理中に、fcntl にシグナルによる割り込みが入りました。 |
| EINVAL | 以下の理由のいずれかが原因で、要求は受け入れられませんでした。
戻りコードに、JRFdTooBig、JRFd2TooSmall、 JrBrlmBadFileType、JrBrlmBadL_Type、JrBrlmInvalidRange、 JrBrlmBadL_Whence、JrNotsupportedForFileType、 JrBadInputBufAddr、JrFileNotEmpty、JrWFildeRdOnly、 JrInvalidFileTag、JrInvalidCcsid、JrBadOptCode という理由コードが伴う場合があります。 |
| EMFILE | 要求されたアクションは F_DUPFD でした。 プロセスが、既にファイル記述子の最大数に達しているか、File_descriptor_2 よりも大きい 使用可能なファイル記述子がありません。 |
| ENOTSOCK | Socket_descriptor が有効なソケット記述子を参照していません。 戻りコードに、JRMustBeSocket という理由コードが伴う場合があります。 |
| EPERM | 要求されたアクションが F_CLOSFD であり、 指定された範囲内のファイル記述子の少なくとも 1 つがオープンしています。 F_CLOSFD を使用してクローズできないファイル記述子についての説明は、 『使用上の注意』を参照してください。 |
fcntl サービスが理由コードを保管するフルワードの名前です。 fcntl サービスは、Return_value が -1 の場合に限り、Reason_code を戻します。 Reason_code は Return_code 値をさらに限定します。理由コードについては、「z/OS UNIX System Services メッセージおよびコード」を参照してください。
指定されたロック操作が正常終了できないようにするロックが存在しない場合、 戻される構造体は、F_UNLCK の l_type を持つように変更されていますが、 そうでない場合は未変更のままです。
fcntl サービスの使用に関する制約事項はありません。
この呼び出し可能サービスを使用した例については、BPX1FCT (fcntl) の例を参照してください。