LSEEK(2)

名称
lseek - 読取り / 書込みファイルオフセット位置を変更する

ライブラリ
libc

書式
<unistd.h> off_t lseek(int fildes, off_t offset, int whence)

解説
lseek() 関数は、ディレクティブ whence に従ってファイル記述子 fildes のオフセットを引数 offset に移動します。引数 fildes はオープンファイル記述子でなければなりません。 lseek() は、次のようにファイル記述子 fildes に対応するファイル位置ポインタを移動します。

whence が SEEK_SET の場合、オフセットは offset バイトに設定されます。

whence が SEEK_CUR の場合、オフセットは現在の位置に offset バイトを加算したものに設定されます。

whence が SEEK_END の場合、オフセットはファイルのサイズに offset バイトを加算したものになります。

lseek() 関数によって、ファイルオフセットをファイルの既存のファイルの終り (EOF) を越えるところに設定できます。 後にデータがこの点に書きこまれると、それ以後のギャップ内のデータに対する読取りは (データが実際にギャップ内に書き込まれるまで) データとして 0 を返します。

シークできないデバイスもあります。そのようなデバイスに対応するポインタの 値は未定義になります。

戻り値
処理が正常に完了すると lseek() は、ファイルの先頭から測定した結果のオフセット位置を バイト単位で返します。そうでない場合は -1 が返され、エラーを示すために errno が設定されます。

エラー
lseek() は次の場合に処理を失敗し、ファイル位置ポインタは変更されません。

[EBADF]
    fildes がオープンファイル記述子ではありません。

[ESPIPE]
    fildes はパイプ、ソケット、または FIFO と対応づけられています。

[EINVAL]
    whence が適切な値ではありません。

関連項目
dup(2), open(2)

バグ
このドキュメントの whence の使用法は正しくない英語ですが、歴史的な理由で維持されています。

規格
lseek() 関数は p1003.1-90 に準拠しています。

歴史
lseek() 関数は AT&T UNIX で登場しました。