.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1980, 1991 Regents of the University of California. .\" and Copyright (c) 2011, Michael Kerrisk .\" All rights reserved. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" @(#)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. .\" .\"******************************************************************* .TH lseek 2 "30 марта 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ lseek \- изменяет файловое смещение, используемое при чтении/записи .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .PP \fBoff_t lseek(int \fP\fIfd\fP\fB, off_t \fP\fIoffset\fP\fB, int \fP\fIwhence\fP\fB);\fP .fi .SH ОПИСАНИЕ Вызов \fBlseek\fP() изменяет файловое смещение в описании открытого файла, связанного с файловым дескрипторов \fIfd\fP, на значение аргумента \fIoffset\fP в соответствии с директивой \fIwhence\fP, которая может принимать одно из следующих значений: .TP \fBSEEK_SET\fP Установить файловое смещение равным \fIoffset\fP (в байтах). .TP \fBSEEK_CUR\fP Установить файловое смещение равным текущему положению плюс \fIoffset\fP (в байтах). .TP \fBSEEK_END\fP Установить файловое смещение равным размеру файла плюс \fIoffset\fP (в байтах). .PP \fBlseek\fP() allows the file offset to be set beyond the end of the file (but this does not change the size of the file). If data is later written at this point, subsequent reads of the data in the gap (a "hole") return null bytes (\[aq]\e0\[aq]) until data is actually written into the gap. .SS "Перемещения по данным файла и промежутки" Since Linux 3.1, Linux supports the following additional values for \fIwhence\fP: .TP \fBSEEK_DATA\fP Подогнать файловое смещение к следующему расположению, большему или равному значению \fIoffset\fP, по которому в файле есть данные. Если значение \fIoffset\fP указывает на данные, то файловое смещение устанавливается в \fIoffset\fP. .TP \fBSEEK_HOLE\fP Подогнать файловое смещение к следующему промежутку, большему или равному значению \fIoffset\fP. Если значение \fIoffset\fP указывает в середину промежутка, то файловое смещение устанавливается в \fIoffset\fP. Если перед \fIoffset\fP нет промежутка, то файловое смещение подгоняется к концу файла (т.е., это скрытый промежуток, который есть в конце любого файла). .PP В обоих, показанных выше, случаях, \fBlseek\fP() завершится с ошибкой, если \fIoffset\fP указывает за конец файла. .PP Эти операции позволяют приложениям отображать промежутки в разреженно выделенном файле. Это может быть полезно для таких приложений, как инструменты резервного копирования файлов, которые могут выиграть в месте при создании резервных копий и сохранить промежутки, если у них есть механизм их обнаружения. .PP .\" https://lkml.org/lkml/2011/4/22/79 .\" http://lwn.net/Articles/440255/ .\" http://blogs.oracle.com/bonwick/entry/seek_hole_and_seek_data Для поддержки этих операций промежуток представляется последовательностью нулей, которые (обычно) физически не занимают места на носителе. Однако файловая система может не сообщать о промежутках, поэтому эти операции — не гарантируемый механизм отображения пространства носителя в файл (более того, последовательность нулей, которая на самом деле была записана на носитель, может не посчитаться промежутком). В простейшей реализации, файловая система может поддержать эти операции так: при \fBSEEK_HOLE\fP всегда возвращать смещение конца файла, а при \fBSEEK_DATA\fP всегда возвращать значение \fIoffset\fP (т.е., даже если расположение, указанное \fIoffset\fP, является промежутком, это можно считать данными, состоящими из последовательности нулей). .PP Чтобы получить определения \fBSEEK_DATA\fP и \fBSEEK_HOLE\fP из \fI\fP, нужно задать макрос тестирования свойств \fB_GNU_SOURCE\fP. .PP Операции \fBSEEK_HOLE\fP и \fBSEEK_DATA\fP поддерживаются следующими файловыми системами: .IP \[bu] 3 Btrfs (начиная с Linux 3.1) .IP \[bu] .\" commit 93862d5e1ab875664c6cc95254fc365028a48bb1 OCFS (начиная с Linux 3.2) .IP \[bu] XFS (начиная с Linux 3.5) .IP \[bu] ext4 (начиная с Linux 3.8) .IP \[bu] \fBtmpfs\fP(5) (начиная с\ Linux 3.8) .IP \[bu] .\" commit 1c6dcbe5ceff81c2cf8d929646af675cd59fe7c0 .\" commit 24bab491220faa446d945624086d838af41d616c NFS (начиная с Linux 3.18) .IP \[bu] .\" commit 0b5da8db145bfd44266ac964a2636a0cf8d7c286 FUSE (начиная с Linux 4.5) .IP \[bu] .\" commit 3a27411cb4bc3ce31db228e3569ad01b462a4310 GFS2 (начиная с Linux 4.15) .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. Получается, что возвращаемое файловое смещение стало бы отрицательным или указывало бы за конец поверхности носителя. .TP \fBENXIO\fP \fIwhence\fP is \fBSEEK_DATA\fP or \fBSEEK_HOLE\fP, and \fIoffset\fP is beyond the end of the file, or \fIwhence\fP is \fBSEEK_DATA\fP and \fIoffset\fP is within a hole at the end of the file. .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. .SH ВЕРСИИ .\" Other systems return the number of written characters, .\" using SEEK_SET to set the counter. (Of written characters.) В Linux при использовании \fBlseek\fP() на устройствах терминалов возвращается ошибка \fBESPIPE\fP. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001, SVr4, 4.3BSD. .PP .\" FIXME . Review http://austingroupbugs.net/view.php?id=415 in the future Значения \fBSEEK_DATA\fP и \fBSEEK_HOLE\fP являются нестандартными расширениями, которые также есть в Solaris, FreeBSD и DragonFly BSD; их предложили включить в следующую редакцию POSIX (выпуск 8). .SH ЗАМЕЧАНИЯ Описание взаимосвязи между файловыми дескрипторами, открытыми файловыми описаниями и файлами смотрите в \fBopen\fP(2). .PP Если установлен флаг состояние файла \fBO_APPEND\fP в открытом файловом описании, то \fBwrite\fP(2) \fIвсегда\fP перемещает файловое смещение в конец файла, независимо от использования \fBlseek\fP(). .PP Некоторые устройства не могут выполнять смещения и в POSIX не указано какие устройства должны поддерживать \fBlseek\fP(). .SH "СМ. ТАКЖЕ" \fBdup\fP(2), \fBfallocate\fP(2), \fBfork\fP(2), \fBopen\fP(2), \fBfseek\fP(3), \fBlseek64\fP(3), \fBposix_fallocate\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Artyom Kunyov , Azamat Hackimov , Dmitry Bolkhovskikh , Katrin Kutepova , Konstantin Shvaykovskiy , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .