@node lseek @section @code{lseek} @findex lseek POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html} Gnulib module: 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 12 @item This function is declared in a different header file (namely, @code{}) 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 When the third argument is invalid, POSIX says that @code{lseek} should set @code{errno} to @code{EINVAL} and return @minus{}1, but in this situation a @code{SIGSYS} signal is raised on some platforms: IRIX 6.5. @item Some systems do not support @code{SEEK_DATA} and @code{SEEK_HOLE}: AIX, HP-UX, Microsoft Windows, NetBSD, OpenBSD. @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