lseek
1. lseek.2.man
Manpage of LSEEK
LSEEK
Section: Linux Programmer's Manual (2)Updated: 2010-09-11
Index Return to Main Contents
名前
lseek - ファイルの読み書きオフセットの位置を変える書式
#include <sys/types.h>#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
説明
lseek() 関数は、ファイルディスクリプタ (descriptor) fd に対応するオープンされたファイルのオフセットを、 whence に基づき offset 引き数の位置へ以下のように変更する:- SEEK_SET
- オフセットは offset バイトに設定される。
- SEEK_CUR
- オフセットは現在位置に offset バイトを足した位置になる。
- SEEK_END
- オフセットはファイルのサイズに offset バイトを足した位置になる。
lseek() 関数は、オフセットをファイルの末尾を越えた位置に設定できる (但し、これによりファイルのサイズが変わらない)。 もしデータがこのオフセット位置以降に書き込まれた場合、 間の空隙の部分 ("穴 (hole)") の読み出しがあると、 実際にそこにデータを書き込まれるまでは NULL バイト (aq\0aq) の列が返される。
返り値
成功した場合、 lseek() は結果のファイル位置をファイルの先頭からのバイト数で返す。 エラーの場合、値 (off_t) -1 が返され、 errno にエラーが指示される。エラー
- EBADF
- fd がオープンされたファイルディスクリプタでない。
- EINVAL
- whence が SEEK_SET, SEEK_CUR, SEEK_END のどれでもない。 または、seek の結果、ファイル・オフセットが負になってしまうか、 seek 可能なデバイスの末尾を越えてしまう。 EOVERFLOW 結果のファイル・オフセットを off_t 型で表現することができない。
- ESPIPE
- fd がパイプ、ソケット、FIFO を参照している。
準拠
SVr4, 4.3BSD, POSIX.1-2001.注意
この文章で使用した whence は英語として正しくないが、 歴史的理由によりそのまま使われている。いくつかのデバイスでは seek ができない。 POSIX はどのデバイスが lseek() に対応すべきかは規定していない。
Linux では、 tty デバイスに lseek() を使用すると ESPIPE を返す。
古いコードを変換する時は whence の値を以下のマクロに置き換えること:
| old | new |
| 0 | SEEK_SET |
| 1 | SEEK_CUR |
| 2 | SEEK_END |
| L_SET | SEEK_SET |
| L_INCR | SEEK_CUR |
| L_XTND | SEEK_END |
dup(2) や fork(2) で作成されたファイルディスクリプタは、現在のファイル位置ポインタ (current file position pointer) を共有しているので、 このようなファイルで移動を行うと競合状態を引き起こす可能性がある。
関連項目
dup(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)
Index
This document was created by man2html using the manual pages.
Time: 17:13:49 GMT, January 19, 2012




