@node lseek
@subsection @code{lseek}
@findex lseek

POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9799919799/functions/lseek.html}

Gnulib module: lseek
@mindex lseek

Portability problems fixed by Gnulib:
@itemize
@item
On some platforms, @code{lseek (fd, offset, SEEK_DATA)} returns a value
greater than @code{offset} even when @code{offset} addresses data:
macOS 14.
@item
This function is declared in a different header file (namely, @code{<io.h>})
on some platforms:
MSVC 14.
@item
On platforms where @code{off_t} is a 32-bit type, @code{lseek} does not work
correctly with files 2 GiB and larger.  @xref{Large File Support}.
@item
This function mistakenly succeeds on pipes on some platforms: mingw, MSVC 14.
@end itemize

Portability problems not fixed by Gnulib:
@itemize
@item
POSIX does not specify which file descriptors support seeking and which don't.
In practice, regular files and block devices support seeking, and ttys, pipes,
and most character devices don't support it.
@item
Some systems do not support @code{SEEK_DATA} and @code{SEEK_HOLE}:
AIX, HP-UX, Microsoft Windows, NetBSD, OpenBSD, Cygwin 3.4.6.
@item
Some systems have a buggy @code{SEEK_DATA} and @code{SEEK_HOLE},
and Gnulib works around the problem via @code{#undef SEEK_DATA}
and @code{#undef SEEK_HOLE}:
FreeBSD 13, macOS 12.
@end itemize
