.\" t .\" Copyright (c) 1980, 1991 Regents of the University of California. .\" and Copyright (c) 2011, Michael Kerrisk .\" All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)lseek.2 6.5 (Berkeley) 3/10/91 .\" .\" Modified 1993-07-23 by Rik Faith .\" Modified 1995-06-10 by Andries Brouwer .\" Modified 1996-10-31 by Eric S. Raymond .\" Modified 1998-01-17 by Michael Haardt .\" .\" Modified 2001-09-24 by Michael Haardt .\" Modified 2003-08-21 by Andries Brouwer .\" 2011-09-18, mtk, Added SEEK_DATA + SEEK_HOLE .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 1997-1998 HANATAKA Shinya .\" all rights reserved. .\" Translated 1997-02-23, HANATAKA Shinya .\" Modified 1998-05-11, HANATAKA Shinya .\" Updated 2001-12-14, Kentaro Shirakata .\" Updated 2003-09-08, Kentaro Shirakata .\" Updated 2005-02-24, Akihiro MOTOKI .\" Updated 2006-03-05, Akihiro MOTOKI, catch up to LDP v2.25 .\" Updated 2013-05-01, Akihiro MOTOKI .\" Updated 2013-05-07, Akihiro MOTOKI .\" .TH LSEEK 2 2014\-06\-13 Linux "Linux Programmer's Manual" .SH 名前 lseek \- ファイルの読み書きオフセットの位置を変える .SH 書式 \fB#include \fP .br \fB#include \fP .sp \fBoff_t lseek(int \fP\fIfd\fP\fB, off_t \fP\fIoffset\fP\fB, int \fP\fIwhence\fP\fB);\fP .SH 説明 \fBlseek\fP() 関数は、ファイルディスクリプター (descriptor) \fIfd\fP に対応するオープンされたファイルのオフセットを、 \fIwhence\fP に基づき \fIoffset\fP 引き数の位置へ以下のように変更する: .TP \fBSEEK_SET\fP オフセットは \fIoffset\fP バイトに設定される。 .TP \fBSEEK_CUR\fP オフセットは現在位置に \fIoffset\fP バイトを足した位置になる。 .TP \fBSEEK_END\fP オフセットはファイルのサイズに \fIoffset\fP バイトを足した位置になる。 .PP \fBlseek\fP() 関数は、オフセットをファイルの末尾を越えた位置に設定できる (但し、これによりファイルのサイズが変わらない)。 もしデータがこのオフセット位置以降に書き込まれた場合、 間の空隙の部分 ("穴 (hole)") の読み出しがあると、 実際にそこにデータを書き込まれるまではヌルバイト (\(aq\e0\(aq) の列が返される。 .SS ファイルのデータとホールの探索 Linux バージョン 3.1 以降では、 \fIwhence\fP に以下の値も指定することができる。 .TP \fBSEEK_DATA\fP ファイルオフセットを \fIoffset\fP 以上で次にデータがある位置に設定する。 \fIoffset\fP がデータを指している場合には、 ファイルオフセットは \fIoffset\fP に設定される。 .TP \fBSEEK_HOLE\fP ファイルオフセットを、 位置が \fIoffset\fP 以上の次のホール (hole) に設定する。 \fIoffset\fP がホールの内部にある場合は、ファイルシステムは \fIoffset\fP に設定される。 \fIoffset\fP 以降にホールがない場合は、 ファイルオフセットはファイル末尾に設定される (つまり、 どのファイルの末尾にも暗黙のホールが存在するということだ)。 .PP 上記のどちらの場合も、 \fIoffset\fP がファイル末尾よりも先を指している場合には \fBlseek\fP() は失敗する。 これらの操作を使うことで、 アプリケーションが、 まばら (sparse ) にページが割り当てられたファイルでホールをマップすることができる。 この機能はファイルバックアップツールなどのアプリケーションで有用である。 ホールを見つける仕組みがあれば、 ファイルバックアップツールで、 バックアップを作成する際に保存領域を節約し、ホールを保持することができる。 .\" https://lkml.org/lkml/2011/4/22/79 .\" http://lwn.net/Articles/440255/ .\" http://blogs.oracle.com/bonwick/entry/seek_hole_and_seek_data これらの操作の目的としては、 ホールは (通常は) バックエンドのファイルストレージには割り当てられていない連続する 0 の列である。 しかし、ファイルシステムにはホールを報告する義務はなく、 そのため、 これらの操作は、 ファイルに実際に割り当てられたストレージ領域をマッピングする方法としては確実性のある仕組みではない。 (また、バックエンドのストレージに実際に書き込まれた連続する 0 の列はホールとして報告されないこともある。) 最も単純な実装としては、 \fBSEEK_HOLE\fP は常にファイル末尾のオフセットを返すようにし、 \fBSEEK_DATA\fP は常に \fIoffset\fP を返すようにすることで、 ファイルシステムはこれらの操作をサポートすることができる (\fBSEEK_DATA\fP は常に \fIoffset\fP を返すというのは、 \fIoffset\fP が参照する場所がホールであったとしても、 連続する 0 の列のデータで構成されているとみなすということである)。 \fI\fP から \fBSEEK_DATA\fP と \fBSEEK_HOLE\fP の定義を得るには、 機能検査マクロ \fB_GNU_SOURCE\fP を定義しなければならない。 \fBSEEK_HOLE\fP, \fBSEEK_DATA\fP 操作に対応しているのは以下のファイルシステムである。 .IP * 3 Btrfs (Linux 3.1 以降) .IP * 3 .\" commit 93862d5e1ab875664c6cc95254fc365028a48bb1 OCFS (Linux 3.2 以降) .IP * XFS (Linux 3.5 以降) .IP * ext4 (Linux 3.8 以降) .IP * tmpfs (Linux 3.8 以降) .SH 返り値 成功した場合、 \fBlseek\fP() は結果のファイル位置をファイルの先頭からのバイト数で返す。 エラーの場合、値 \fI(off_t)\ \-1\fP が返され、 \fIerrno\fP にエラーが指示される。 .SH エラー .TP \fBEBADF\fP \fIfd\fP がオープンされたファイルディスクリプターでない。 .TP \fBEINVAL\fP .\" Some systems may allow negative offsets for character devices .\" and/or for remote filesystems. \fIwhence\fP が有効な値ではない。または、seek の結果、ファイルオフセットが負に なってしまうか、 seek 可能なデバイスの末尾を越えてしまう。 .TP \fBEOVERFLOW\fP .\" HP-UX 11 says EINVAL for this case (but POSIX.1 says EOVERFLOW) 結果のファイルオフセットを \fIoff_t\fP 型で表現することができない。 .TP \fBESPIPE\fP \fIfd\fP がパイプ、ソケット、FIFO を参照している。 .TP \fBENXIO\fP \fIwhence\fP が \fBSEEK_DATA\fP か \fBSEEK_HOLE\fP で、 現在のファイルオフセットがファイルの末尾を超えた位置である。 .SH 準拠 SVr4, 4.3BSD, POSIX.1\-2001. .\" FIXME . Review http://austingroupbugs.net/view.php?id=415 in the future \fBSEEK_DATA\fP と \fBSEEK_HOLE\fP は非標準の拡張で、 Solaris, FreeBSD, DragonFly BSD にも存在する。 これらは POSIX の次の版 (Issue 8) に入れるよう提案されている。 .SH 注意 ファイルディスクリプター、オープンファイル記述、ファイルの関係の説明については \fBopen\fP(2) を参照。 いくつかのデバイスでは seek ができない。 POSIX はどのデバイスが \fBlseek\fP() に対応すべきかは規定していない。 .\" Other systems return the number of written characters, .\" using SEEK_SET to set the counter. (Of written characters.) Linux では、端末 (terminal) デバイスに \fBlseek\fP() を使用すると \fBESPIPE\fP が返る。 古いコードを変換する時は \fIwhence\fP の値を以下のマクロに置き換えること: .TS c c l l. old new 0 SEEK_SET 1 SEEK_CUR 2 SEEK_END L_SET SEEK_SET L_INCR SEEK_CUR L_XTND SEEK_END .TE .\" .PP .\" SVr1-3 returns \fIlong\fP instead of \fIoff_t\fP, .\" (ancient) BSD returns \fIint\fP. .PP \fBdup\fP(2) や \fBfork\fP(2) で作成されたファイルディスクリプターは、現在のファイル位置ポインター (current file position pointer) を共有しているので、 このようなファイルで移動を行うと競合状態を引き起こす可能性がある。 .SH 関連項目 \fBdup\fP(2), \fBfork\fP(2), \fBopen\fP(2), \fBfseek\fP(3), \fBlseek64\fP(3), \fBposix_fallocate\fP(3) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。