send_file サブルーチン
目的
ソケットを介してファイルの内容を送信します。
ライブラリー
標準 C ライブラリー (libc.a)
構文
説明
送信ファイル サブルーチンは、 Socket_p (S) パラメーターが指す接続ソケットを介して、 SF_IOBUF パラメーターで指定されたオープン・ファイルからデータを送信します。
パラメーター
| 項目 | 説明 |
|---|---|
| Socket_p (S) | ファイルが送信される先のソケットのソケット記述子を指します。 注: これは、ほとんどのソケット関数とは異なります。
|
| SF_IOBUF | 以下のように定義された SF_PARM 構造体を指します。
|
マークされたすべてのフィールドInputSF_PARM 構造では、 送信ファイル 呼び出しの前にアプリケーションによってセットアップする必要があります。 マークされたすべてのフィールドOutputSF_PARM 構造内のデータが正常に伝送されると、 送信ファイル によって調整されます。つまり、指定されたデータ伝送が部分的に行われるか、完全に行われます。 送信ファイル サブルーチンは、 ヘッダー・データが指すバッファーから ヘッダーの長さ バイトを書き込もうとします。その後に、 ファイル記述子に関連付けられたファイルから ファイル・バイト が続き、その後に、 Socket_p (S)が指すソケットに関連付けられた接続を介して、 トレーラー・データが指すバッファーから トレーラーの長さ バイトが続きます。 データが送信されると、カーネルは SF_IOBUF が指すパラメーターを更新します。これにより、ファイル・データ伝送を完了するために 送信ファイル を複数回呼び出す必要がある場合 (シグナルによる割り込みまたは非ブロッキング入出力モードのいずれかの理由で)、アプリケーションはパラメーターを設定したり再調整したりせずに 送信ファイル コマンドを再発行することができます。 アプリケーションがfile_offsetを実際のファイル・サイズより大きく設定した場合、またはfile_bytesを(実際のファイル・サイズ-file_offset)より大きく設定した場合、戻り値は-1、errnoはEINVALとなる。 |
|
| flags | 以下の属性を指定します。
SF クローズ フラグが設定されている場合、 Socket_p (S) によって指定された接続されたソケットは、要求された伝送が正常に行われた後、 送信ファイル によって切断され、クローズされます。 Socket_pが指すソケットディスクリプタには-1設定される。 send_fileが non-0を返した場合、このフラグは有効にならない。 SF_REUSEフラグは現在AIX® ではサポートされていない。このフラグを指定すると、Socket_pが指すソケットはクローズされ、-1返される。 次の接続のために新規ソケットを作成する必要があります。 送信ファイル は、カーネル・メモリー内のネットワーク・バッファー・キャッシュを利用して、出力ファイル・データを動的にキャッシュします。 これにより、以下のようなファイルの 送信ファイル パフォーマンスを向上させることができます。
アプリケーションは、 SF_DONT_キャッシュ フラグを使用して、指定されたファイルをキャッシュから除外することができます。 送信ファイル は、キャッシュ内のファイル・データが一定期間有効であることを確認するために、頻繁にキャッシュを更新します。 いいえ コマンドによって制御されるネットワーク・オプション・パラメーター「send_file_duration」を変更して、 送信ファイル キャッシュ検証の間隔を構成することができます。デフォルトは 300 (秒) です。 アプリケーションは SF_SYNC_キャッシュ フラグを使用して、「send_file_duration」の値に関係なく、 送信ファイルによってファイルが送信される前に、指定されたファイルのキャッシュ妥当性検査が行われるようにすることができます。 その他のネットワーク・バッファー・キャッシュ関連パラメーターは、「nbc_limit」、「nbc_max_cache」、および「nbc_min_cache」です。 その他の情報については、 いいえ コマンドを参照してください。 |
戻り値
送信ファイルから返される可能性がある戻り値は、以下の 3 つです。
| 値 | 説明 |
|---|---|
| -1 | エラーが発生しました。errno にエラー・コードが含まれています。 |
| 0 | コマンドは、正常に完了しました。 |
| 1 | コマンドが部分的に完了し、一部のデータが送信されましたが、何らかの理由 (例えば、コマンドがシグナルによって中断されたなど) でコマンドが戻らなければなりません。 |
マークされたフィールドOutput戻り値が 0 または 1 の場合、 SF_PARM 構造体 ( SF_IOBUFによって指し示される) 内の値が 送信ファイル によって更新されます。 送信バイト数 フィールドには、この呼び出しで送信された合計バイト数が含まれます。 これは常に、 送信バイト数 (Output) <= ヘッダーの長さ(Input) + ファイル・バイト(Input) + トレーラーの長さ (Input).
送信ファイル は、ブロッキング入出力モードおよび非ブロッキング入出力モードをサポートします。 ブロッキング入出力モードでは、 送信ファイル は、すべてのファイル・データ (およびヘッダーとトレーラー) が送信されるまでブロックします。 伝送結果を反映するように SF_IOBUF を調整し、0 を返します。 要求が完全に実行される前に 送信ファイル が中断される可能性があります。その場合、は伝送の進行状況を反映するように SF_IOBUF を調整し、1 を返します。
非ブロッキング入出力モードでは、 送信ファイル は、ソケット・スペースが許可する量だけ伝送し、伝送の進行状況を反映するように SF_IOBUF を調整し、0 または 1 のいずれかを戻します。 システムにデータをバッファするためのソケットスペースがない場合、send_fileは-1を返し、 errno に EWOULDBLOCK をセットする。 選択 または 投票 を使用して、より多くのデータを送信できる時期を判別することができます。
| 戻された可能性のある errno: | |
|---|---|
| EBADF | ソケットまたはファイル・ディスクリプター・パラメーターのいずれかが無効です。 |
| ENOTSOCK | ソケット・パラメーターは、ソケットではなくファイルを参照します。 |
| EPROTONOSUPPORT | サポートされていないプロトコルです。 |
| EFAULT | HeaderTailer パラメーターで指定されたアドレスは、ユーザー・アドレス・スペースの書き込み可能部分に含まれていません。 |
| EINTR | データが送信される前に、操作がシグナルによって割り込まれました。 (一部のデータが送信された場合、 送信ファイル はシグナルの前に送信されたバイト数を戻し、EINTR は設定されません。) |
| EINVAL | オフセット、HeaderTrailer,の長さ、または flags パラメータが無効です。 |
| ENOTCONN | 接続されていないソケット上の 送信ファイル 、ピアとの接続シーケンスを完了していないソケット上の 送信ファイル 、またはピアに接続されていないソケット上の。 |
| EWOULDBLOCK | ソケットは非ブロッキングとしてマークされ、要求された操作はブロックされます。 |
| ENOMEM | 操作を実行するために使用可能なメモリーがシステムにありません。 |
PerformanceNote
ネットワーク・バッファー・キャッシュを利用することにより、 送信ファイル はファイル伝送のパフォーマンスとネットワーク・スループットを向上させます。 4K バイトより大きいファイルの場合に推奨されます。