標準
標準/拡張機能 |
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 タイムアウト値に達しました。