lseek()
code:lseek.c
off_t lseek(int fd, off_t offset, int whence);
説明
lseek() は、ファイルディスクリプタ fd 内部のファイルオフセットを指定した位置 offset に移動します
位置の指定方法は3通りあり、それを whence ディレクティブに指定します
返り値
成功した場合、 lseek() は結果のファイル位置をファイルの先頭からのバイト数で返す。
エラーの場合、値 (off_t) -1 が返され、 errno にエラーが指示される。
The off_t data type is a signed integer data type specified by POSIX.1.
off_t データ型は、POSIX.1 で指定された符号付き整数データ型です。
table:whence
フラグ 移動先 起点
SEEK_SET (先頭から) offset バイトに設定した位置 ファイル先頭
SEEK_CUR 現在位置に offset バイトを足した(引いた)位置 現在のファイルオフセット
SEEK_END ファイルのサイズに offset バイトを足した(引いた)位置 ファイル末尾
5.7 その他のシステムコール lseek(2)
https://gyazo.com/eb1775b25cb86fc6a103963614c214f6
lseek() は、オフセットをファイルの末尾を越えた位置に設定できる
lseek(fd, +n, SEEK_END)
(但し、これによりファイルのサイズが変わらない)。
もしデータがこのオフセット位置以降に書き込まれた場合、 間の空隙の部分 ("穴 (hole)") の読み出しがあると、 実際にそこにデータを書き込まれるまではヌルバイト ('\0') の列が返される。