Unix-system-calls-lseek

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

lseek()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

lseek-読み取り/書き込みファイルオフセットの再配置

概要

  • #include <sys/types.h> * *#include <unistd.h> *
*off_t lseek(int* __fildes __ **、off_t * *__offset __* *、int * *__whence __* *); **

説明

*lseek* ()関数は、ディレクティブ_whence_に従って、ファイル記述子_fildes_に関連付けられた開いているファイルのオフセットを次のように引数_offset_に再配置します。

Tag

説明

*SEEK_SET*

オフセットは_offset_バイトに設定されます。

*SEEK_CUR*

オフセットは、現在の場所に_offset_バイトを加えた値に設定されます。

*SEEK_END*

オフセットは、ファイルのサイズに_offset_バイトを加えたものに設定されます。

*lseek* ()関数を使用すると、ファイルオフセットをファイルの末尾を超えて設定できます(ただし、これによりファイルのサイズは変更されません)。 この時点でデータが後で書き込まれた場合、データが実際にギャップに書き込まれるまで、ギャップ(「ホール」)内のデータの後続の読み取りはヌルバイト(「\ 0」)を返します。

返り値

正常に完了すると、 lseek ()は、ファイルの先頭からのバイト単位で測定されたオフセット位置を返します。 それ以外の場合は、_(off_t)-1_の値が返され、_errno_がエラーを示すように設定されます。

エラー

Tag

説明

*EBADF*

_fildes_は開いているファイル記述子ではありません。

*EINVAL*

_whence_は、SEEK_SET、SEEK_CUR、SEEK_ENDのいずれでもありません。または、結果のファイルオフセットが負になるか、シーク可能なデバイスの終端を超えます。

オーバーフロー

結果のファイルオフセットは、_off_t_で表すことができません。

エスピペ

_fildes_は、パイプ、ソケット、またはFIFOに関連付けられています。

準拠

SVr4、4.3BSD、POSIX.1-2001。

制限事項

一部のデバイスはシークできず、POSIXは lseek ()をサポートする必要があるデバイスを指定しません。

Linux固有の制限:ttyデバイスで lseek ()を使用すると、 ESPIPE が返されます。

ノート

このドキュメントでの_whence_の使用は間違った英語ですが、歴史的な理由により維持されています。

古いコードを変換する場合、_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)によって作成されたファイル記述子は現在のファイル位置ポインターを共有するため、このようなファイルのシークは競合状態の対象になる可能性があることに注意してください。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements