LSEEK
Section: Linux Programmer's Manual (2)
Updated: 2001-09-24
Index
JM Home Page
roff page
名前
lseek - ファイルの読み書きオフセットの位置を変える
書式
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
説明
lseek()
関数は、ファイルディスクリプタ (descriptor)
fildes
に対応するオープンされたファイルのオフセットを、
whence
に基づき
offset
引き数の位置へ以下のように変更する:
- SEEK_SET
-
オフセットは
offset
バイトに設定される。
- SEEK_CUR
-
オフセットは現在位置に
offset
バイトを足した位置になる。
- SEEK_END
-
オフセットはファイルのサイズに
offset
バイトを足した位置になる。
lseek()
関数は、オフセットをファイルの末尾を越えた位置に設定できる
(但し、これによりファイルのサイズが変わらない)。
もしデータがこのオフセット位置以降に書き込まれた場合、
間の空隙の部分 ("穴 (hole)") の読み出しがあると、
実際にそこにデータを書き込まれるまでは
NULL バイト ('\0') の列が返される。
返り値
成功した場合、
lseek()
は結果のファイル位置をファイルの先頭からのバイト数で返す。
エラーの場合、値として (off_t)-1 を返し、
errno
にエラーが指示される。
エラー
- EBADF
-
fildes
がオープンされたファイルディスクリプタでない。
- EINVAL
-
whence
が
SEEK_SET,
SEEK_CUR,
SEEK_END
のどれでもない。
または、seek の結果、ファイル・オフセットが負になってしまうか、
seek 可能なデバイスの末尾を越えてしまう。
EOVERFLOW
結果のファイル・オフセットを
off_t
型で表現することができない。
- ESPIPE
-
fildes
がパイプ、ソケット、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
|
返り値の型は、SVr1-3 では off_t ではなく long であり、
BSD では int である。
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: 04:31:51 GMT, November 19, 2007