pwrite() - ファイル・ポインターのないファイルまたはソケットへのデータの書き込み

標準

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

Single UNIX Specification、バージョン 2
Single UNIX Specification、バージョン 3

両方 OS/390 V2R10

形式

#define _XOPEN_SOURCE 500
#include <unistd.h>

ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);

機能説明

pwrite() 関数は、ファイル・ポインターを変えずに、ファイル内の指定された位置に書き込む点を除けば、write() と同じアクションを実行します。

pwrite() の最初の 3 つの引数は、write() と同じですが、4 番目の引数として、ファイルの希望する位置を示す offset が追加されています。

戻り値

正常に実行された場合、pwrite() は、fildes に関連したファイルに、実際に書き込まれたバイト数を戻します。この数は、nbyte より大きくはありません。

正常に実行されなかった場合、pwrite() は -1 を戻して、errno を次のいずれかの 値に設定します。

エラー・コード
説明
EAGAIN
リソースは一時的に使用できません。以降の要求は正常に 完了できます。
EBADF
fildes が、有効なファイルまたはソケット記述子ではあり ません。
ECONNRESET
接続はピアによって強制的にクローズされました。
EDESTADDRREQ
ソケットは接続目的でないため、ピア・アドレスは設定されません。
EFAULT
buf および nbyte パラメーターを使用すると、呼び出し元のアドレス・スペースの外側のストレージにアクセスすることになります。
EFBIG
システム設定の最大ファイル・サイズ、またはインプリメンテーションがサポートするプロセスのファイル・サイズ制限を超えるファイルを、書き込もうとしました。

ファイルは通常のファイルであり、nbyte は 0 より大きく、開始位置は、フィールドに関連したオープン・ファイル記述で設定されたオフセットの最大値より 大きいかまたは等しくなっています。

EINTR
出力を書き込む前に pwrite() にシグナルが割り込みました。
EINVAL
要求が無効か、またはサポートされていません。fildes が 参照する STREAM またはマルチプレクサーが、マルチプレクサーから ダウンストリームへ (直接または間接に) リンクされます。

offset 引数は無効です。値は負です。

EIO
プロセスはバックグラウンド・プロセス・グループに入って いて、制御端末に書き込もうとしていますが、(termios.h ヘッダー・ファイルに定義されている) TOSTOP が 設定され、プロセスは SIGTTOU シグナルを無視もブロックもしていなく、プロセスのプロセス・グループは孤立しています。入出力エラーが発生しました。
EMSGSIZE
メッセージが大きすぎて、1 つのデータグラムとして送信されませんでした。
ENOBUFS
メッセージの送信にバッファー・スペースを使用することができません。
ENOSPC
出力装置には使用可能なスペースが残っていません。
ENOTCONN
ソケットが接続していません。
ENXIO
書き込もうとしている STREAM でハングアップが発生しました。
EPIPE
pwrite() は、他のプロセスが読み取るためにオープンして いないパイプに書き込もうとしています。このエラーは SIGPIPE シグナルも生成します。接続されたストリーム・ソケットの場合には、ピア・ソケット との接続が失われています。
ERANGE
転送要求サイズは、fildes と 関連した STREAMS ファイルによってサポートされた範囲を超えて いました。
ESPIPE
fildes は、パイプまたは FIFO に関連付けられています。
EWOULDBLOCK
socket は非ブロック・モードであり、使用可能なデータ・バッファーがないか、バッファーが使用可能になる前に SO_SNDTIMEO タイムアウト値に達しました。

関連情報