mirror of https://github.com/mkerrisk/man-pages
221 lines
5.7 KiB
Groff
221 lines
5.7 KiB
Groff
.\" Copyright 2004 Andries Brouwer <aeb@cwi.nl>.
|
|
.\" and Copyright (c) 2020 Michael Kerrisk <mtk.manpages@gmail.com>
|
|
.\"
|
|
.\" %%%LICENSE_START(VERBATIM)
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
.\" have taken the same level of care in the production of this manual,
|
|
.\" which is licensed free of charge, as they might when working
|
|
.\" professionally.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\" %%%LICENSE_END
|
|
.\"
|
|
.TH LSEEK64 3 2020-11-01 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
lseek64 \- reposition 64-bit read/write file offset
|
|
.SH SYNOPSIS
|
|
.BR "#define _LARGEFILE64_SOURCE" " /* See feature_test_macros(7) */"
|
|
.br
|
|
.B #include <sys/types.h>
|
|
.br
|
|
.B #include <unistd.h>
|
|
.PP
|
|
.BI "off64_t lseek64(int " fd ", off64_t " offset ", int " whence );
|
|
.SH DESCRIPTION
|
|
The
|
|
.BR lseek ()
|
|
family of functions reposition the offset of the open file associated
|
|
with the file descriptor
|
|
.I fd
|
|
to
|
|
.I offset
|
|
bytes relative to the start, current position, or end of the file,
|
|
when
|
|
.I whence
|
|
has the value
|
|
.BR SEEK_SET ,
|
|
.BR SEEK_CUR ,
|
|
or
|
|
.BR SEEK_END ,
|
|
respectively.
|
|
.PP
|
|
For more details, return value, and errors, see
|
|
.BR lseek (2).
|
|
.PP
|
|
Four interfaces are available:
|
|
.BR lseek (),
|
|
.BR lseek64 (),
|
|
.BR llseek (),
|
|
and
|
|
.BR _llseek ().
|
|
.\"
|
|
.\" For some background details, see:
|
|
.\" https://lore.kernel.org/linux-man/CAKgNAkhNSWR3uYhYYaxx74fZfJ3JrpfAAPVrK0AFk_cAOUsbDg@mail.gmail.com/
|
|
.\"
|
|
.SS lseek()
|
|
Prototype:
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
.BI "off_t lseek(int " fd ", off_t " offset ", int " whence );
|
|
.EE
|
|
.in
|
|
.PP
|
|
The C library's
|
|
.BR lseek ()
|
|
wrapper function uses the type
|
|
.IR off_t .
|
|
This is a 32-bit signed type on 32-bit architectures, unless one
|
|
compiles with
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
#define _FILE_OFFSET_BITS 64
|
|
.EE
|
|
.in
|
|
.PP
|
|
in which case it is a 64-bit signed type.
|
|
.SS lseek64()
|
|
Prototype:
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
.BI "off64_t lseek64(int " fd ", off64_t " offset ", int " whence );
|
|
.EE
|
|
.in
|
|
.PP
|
|
The
|
|
.BR lseek64 ()
|
|
library function uses a 64-bit type even when
|
|
.I off_t
|
|
is a 32-bit type.
|
|
Its prototype (and the type
|
|
.IR off64_t )
|
|
is available only when one compiles with
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
#define _LARGEFILE64_SOURCE
|
|
.EE
|
|
.in
|
|
.PP
|
|
The function
|
|
.BR lseek64 ()
|
|
.\" in glibc 2.0.94, not in 2.0.6
|
|
is available since glibc 2.1.
|
|
.\"
|
|
.SS llseek()
|
|
Prototype:
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
.BI "loff_t llseek(int " fd ", loff_t " offset ", int " whence );
|
|
.EE
|
|
.in
|
|
.PP
|
|
The type
|
|
.I loff_t
|
|
is a 64-bit signed type.
|
|
The
|
|
.BR llseek ()
|
|
library function is available in glibc and works without special defines.
|
|
However, the glibc headers do not provide a prototype.
|
|
Users should add
|
|
the above prototype, or something equivalent, to their own source.
|
|
When users complained about data loss caused by a miscompilation of
|
|
.BR e2fsck (8),
|
|
glibc 2.1.3 added the link-time warning
|
|
.PP
|
|
.in +4n
|
|
"the \`llseek\' function may be dangerous; use \`lseek64\' instead."
|
|
.in
|
|
.PP
|
|
This makes this function unusable if one desires a warning-free
|
|
compilation.
|
|
.PP
|
|
Since glibc 2.28,
|
|
.\" glibc commit 5c5c0dd747070db624c8e2c43691cec854f114ef
|
|
this function symbol is no longer available to newly linked applications.
|
|
.\"
|
|
.SS _llseek()
|
|
On 32-bit architectures,
|
|
this is the system call that is used (by the C library wrapper functions)
|
|
to implement all of the above functions.
|
|
The prototype is:
|
|
.PP
|
|
.in +4n
|
|
.EX
|
|
.BI "int _llseek(int " fd ", off_t " offset_hi ", off_t " offset_lo ,
|
|
.BI " loff_t *" result ", int " whence );
|
|
.EE
|
|
.in
|
|
.PP
|
|
For more details, see
|
|
.BR llseek (2).
|
|
.PP
|
|
64-bit systems don't need an
|
|
.BR _llseek ()
|
|
system call.
|
|
Instead, they have an
|
|
.BR lseek (2)
|
|
system call that supports 64-bit file offsets.
|
|
.\" In arch/x86/entry/syscalls/syscall_32.tbl,
|
|
.\" we see the following line:
|
|
.\"
|
|
.\" 140 i386 _llseek sys_llseek
|
|
.\"
|
|
.\" This is essentially telling us that 'sys_llseek' (the name generated
|
|
.\" by SYSCALL_DEFINE5(llseek...)) is exposed to user-space as system call
|
|
.\" number 140, and that system call number will (IIUC) be exposed in
|
|
.\" autogenerated headers with the name "__NR__llseek" (i.e., "_llseek").
|
|
.\" The "i386" is telling us that this happens in i386 (32-bit Intel).
|
|
.\" There is nothing equivalent on x86-64, because 64 bit systems don't
|
|
.\" need an _llseek system call.
|
|
.SH ATTRIBUTES
|
|
For an explanation of the terms used in this section, see
|
|
.BR attributes (7).
|
|
.TS
|
|
allbox;
|
|
lb lb lb
|
|
l l l.
|
|
Interface Attribute Value
|
|
T{
|
|
.BR lseek64 ()
|
|
T} Thread safety MT-Safe
|
|
.TE
|
|
.SH NOTES
|
|
.BR lseek64 ()
|
|
is one of the functions that was specified in the Large File Summit (LFS)
|
|
specification that was completed in 1996.
|
|
The purpose of the specification was to provide transitional support
|
|
that allowed applications on 32-bit systems to access
|
|
files whose size exceeds that which can be represented with a 32-bit
|
|
.IR off_t
|
|
type.
|
|
As noted above, this symbol is exposed by header files if the
|
|
.B _LARGEFILE64_SOURCE
|
|
feature test macro is defined.
|
|
ALternatively, on a 32-bit system, the symbol
|
|
.I lseek
|
|
is aliased to
|
|
.I lseek64
|
|
if the macro
|
|
.B _FILE_OFFSET_BITS
|
|
is defined with the value 64.
|
|
.SH SEE ALSO
|
|
.BR llseek (2),
|
|
.BR lseek (2)
|