Man page - lseek(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru ro de

Manual

LSEEK

名 前
書 式
説 明
フ ァ イ ル の デ ー タ と ホ ー ル の 探 索
返 り 値
エ ラ ー
準 拠
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

lseek - フ ァ イ ル の 読 み 書 き オ フ セ ッ ト の 位 置 を 変 え る

書 式

#include <sys/types.h>
#include <unistd.h>

off_t lseek(int fd , off_t offset , int whence );

説 明

lseek () repositions the file offset of the open file description associated with the file descriptor fd to the argument offset according to the directive whence as follows:
SEEK_SET

フ ァ イ ル オ フ セ ッ ト は offset バ イ ト に 設 定 さ れ る 。

SEEK_CUR

フ ァ イ ル オ フ セ ッ ト は 現 在 位 置 に offset バ イ ト を 足 し た 位 置 に な る 。

SEEK_END

フ ァ イ ル オ フ セ ッ ト は フ ァ イ ル の サ イ ズ に offset バ イ ト を 足 し た 位 置 に な る 。

lseek () は 、 オ フ セ ッ ト を フ ァ イ ル の 末 尾 を 越 え た 位 置 に 設 定 で き る (但 し 、 こ れ に よ り フ ァ イ ル の サ イ ズ が 変 わ ら な い )。 も し デ ー タ が こ の オ フ セ ッ ト 位 置 以 降 に 書 き 込 ま れ た 場 合 、 間 の 空 隙 の 部 分 ("穴 (hole)") の 読 み 出 し が あ る と 、 実 際 に そ こ に デ ー タ を 書 き 込 ま れ る ま で は ヌ ル バ イ ト ('\0') の 列 が 返 さ れ る 。

フ ァ イ ル の デ ー タ と ホ ー ル の 探 索

Linux バ ー ジ ョ ン 3.1 以 降 で は 、 whence に 以 下 の 値 も 指 定 す る こ と が で き る 。
SEEK_DATA

フ ァ イ ル オ フ セ ッ ト を offset 以 上 で 次 に デ ー タ が あ る 位 置 に 設 定 す る 。 offset が デ ー タ を 指 し て い る 場 合 に は 、 フ ァ イ ル オ フ セ ッ ト は offset に 設 定 さ れ る 。

SEEK_HOLE

フ ァ イ ル オ フ セ ッ ト を 、 位 置 が offset 以 上 の 次 の ホ ー ル (hole) に 設 定 す る 。 offset が ホ ー ル の 内 部 に あ る 場 合 は 、 フ ァ イ ル シ ス テ ム は offset に 設 定 さ れ る 。 offset 以 降 に ホ ー ル が な い 場 合 は 、 フ ァ イ ル オ フ セ ッ ト は フ ァ イ ル 末 尾 に 設 定 さ れ る (つ ま り 、 ど の フ ァ イ ル の 末 尾 に も 暗 黙 の ホ ー ル が 存 在 す る と い う こ と だ )。

上 記 の ど ち ら の 場 合 も 、 offset が フ ァ イ ル 末 尾 よ り も 先 を 指 し て い る 場 合 に は lseek () は 失 敗 す る 。

こ れ ら の 操 作 を 使 う こ と で 、 ア プ リ ケ ー シ ョ ン が 、 ま ば ら (sparse ) に ペ ー ジ が 割 り 当 て ら れ た フ ァ イ ル で ホ ー ル を マ ッ プ す る こ と が で き る 。 こ の 機 能 は フ ァ イ ル バ ッ ク ア ッ プ ツ ー ル な ど の ア プ リ ケ ー シ ョ ン で 有 用 で あ る 。 ホ ー ル を 見 つ け る 仕 組 み が あ れ ば 、 フ ァ イ ル バ ッ ク ア ッ プ ツ ー ル で 、 バ ッ ク ア ッ プ を 作 成 す る 際 に 保 存 領 域 を 節 約 し 、 ホ ー ル を 保 持 す る こ と が で き る 。

こ れ ら の 操 作 の 目 的 と し て は 、 ホ ー ル は (通 常 は ) バ ッ ク エ ン ド の フ ァ イ ル ス ト レ ー ジ に は 割 り 当 て ら れ て い な い 連 続 す る 0 の 列 で あ る 。 し か し 、 フ ァ イ ル シ ス テ ム に は ホ ー ル を 報 告 す る 義 務 は な く 、 そ の た め 、 こ れ ら の 操 作 は 、 フ ァ イ ル に 実 際 に 割 り 当 て ら れ た ス ト レ ー ジ 領 域 を マ ッ ピ ン グ す る 方 法 と し て は 確 実 性 の あ る 仕 組 み で は な い 。 (ま た 、 バ ッ ク エ ン ド の ス ト レ ー ジ に 実 際 に 書 き 込 ま れ た 連 続 す る 0 の 列 は ホ ー ル と し て 報 告 さ れ な い こ と も あ る 。 ) 最 も 単 純 な 実 装 と し て は 、 SEEK_HOLE は 常 に フ ァ イ ル 末 尾 の オ フ セ ッ ト を 返 す よ う に し 、 SEEK_DATA は 常 に offset を 返 す よ う に す る こ と で 、 フ ァ イ ル シ ス テ ム は こ れ ら の 操 作 を サ ポ ー ト す る こ と が で き る ( SEEK_DATA は 常 に offset を 返 す と い う の は 、 offset が 参 照 す る 場 所 が ホ ー ル で あ っ た と し て も 、 連 続 す る 0 の 列 の デ ー タ で 構 成 さ れ て い る と み な す と い う こ と で あ る )。

<unistd.h> か ら SEEK_DATA SEEK_HOLE の 定 義 を 得 る に は 、 機 能 検 査 マ ク ロ _GNU_SOURCE を 定 義 し な け れ ば な ら な い 。

SEEK_HOLE , SEEK_DATA 操 作 に 対 応 し て い る の は 以 下 の フ ァ イ ル シ ス テ ム で あ る 。

*

Btrfs (Linux 3.1 以 降 )

*

OCFS (Linux 3.2 以 降 )

*

XFS (Linux 3.5 以 降 )

*

ext4 (Linux 3.8 以 降 )

*

tmpfs (5) (Linux 3.8 以 降 )

*

NFS (Linux 3.18 以 降 )

*

FUSE (Linux 4.5 以 降 )

*

GFS2 (Linux 4.15 以 降 )

返 り 値

成 功 し た 場 合 、 lseek () は 結 果 の フ ァ イ ル 位 置 を フ ァ イ ル の 先 頭 か ら の バ イ ト 数 で 返 す 。 エ ラ ー の 場 合 、 値 (off_t) -1 が 返 さ れ 、 errno に エ ラ ー が 指 示 さ れ る 。

エ ラ ー

EBADF

fd が オ ー プ ン さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

EINVAL

whence が 有 効 な 値 で は な い 。 ま た は 、 seek の 結 果 、 フ ァ イ ル オ フ セ ッ ト が 負 に な っ て し ま う か 、 seek 可 能 な デ バ イ ス の 末 尾 を 越 え て し ま う 。

ENXIO

whence is SEEK_DATA or SEEK_HOLE , and offset is beyond the end of the file, or whence is SEEK_DATA and offset is within a hole at the end of the file.

EOVERFLOW

結 果 の フ ァ イ ル オ フ セ ッ ト を off_t 型 で 表 現 す る こ と が で き な い 。

ESPIPE

fd が パ イ プ 、 ソ ケ ッ ト 、 FIFO を 参 照 し て い る 。

準 拠

POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

SEEK_DATA SEEK_HOLE は 非 標 準 の 拡 張 で 、 Solaris, FreeBSD, DragonFly BSD に も 存 在 す る 。 こ れ ら は POSIX の 次 の 版 (Issue 8) に 入 れ る よ う 提 案 さ れ て い る 。

注 意

フ ァ イ ル デ ィ ス ク リ プ タ ー 、 オ ー プ ン フ ァ イ ル 記 述 、 フ ァ イ ル の 関 係 の 説 明 に つ い て は open (2) を 参 照 。

If the O_APPEND file status flag is set on the open file description, then a write (2) always moves the file offset to the end of the file, regardless of the use of lseek ().

The off_t data type is a signed integer data type specified by POSIX.1.

い く つ か の デ バ イ ス で は seek が で き な い 。 POSIX は ど の デ バ イ ス が lseek () に 対 応 す べ き か は 規 定 し て い な い 。

On Linux, using lseek () on a terminal device fails with the error ESPIPE .

関 連 項 目

dup (2), fallocate (2), fork (2), open (2), fseek (3), lseek64 (3), posix_fallocate (3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。