Четверг, 19.10.2017, 19:04
Приветствую Вас, Гость
Главная » 2014 » Январь » 13 » Поиск при помощи lseek()
10:38
Поиск при помощи lseek()

Обычно ввод-вывод выполняется в файле линейно, и все действия поиска, в которыхвозникает необходимость, относятся только к неявному обновлению позиции в файле после операций считывания и записи. Некоторым приложениям,однако, приходится перемещаться по файлу. Системный вызов lseekO предназначендля установки позиции в файле, соответствующем файловому дескриптору.Помимо обновления позиции в файле, он больше ничего не делает и вообщеникакие действия ввода-вывода не инициирует:finclude <sys/types.h>finclude <unistd.h>off t lseek (int fd. off t pos, int origin);Поведение lseekO зависит от аргумента origin, который может приниматьследующие значения:SEEKCURТекущая позиция в файле fd увеличивается на значение аргумента pos, которыйможет содержать отрицательное, положительное и пулевое значение.Если pos равен нулю, то возвращается значение текущей позиции в файле.SEEKENDВ качестве текущей позиции в файле fd устанавливается значение, равноетекущей длине файла плюс значение pos. Аргумент pos может содержать отрицательное,положительное и нулевое значение. Если pos равен нулю, тосмещение устанавливается па конец файла.SEEK_SETТекущая позиция в файле fd приравнивается значению аргумента pos. Еслиpos равен нулю, то смещение устанавливается на начало файла.В случае успеха вызов возвращает новую позицию в файле. В случае ошибкион возвращает значение -1 и соответствующим образом устанавливает переменнуюеггпо.Например, чтобы установить позицию в файле fd па значение 1825, используйтеследующий код:o f f J rot ,ret = lseek (fd. (off_L) 1825. SEtK_SH).it (ret ==? (off_t) 1)/* ошибка */Этот код устанавливает позицию в файле fd на конец файла:oft_t r e t .rot - lseek (fd. 0. SltKJNI)).і f (rot == ( o f f t ) I )/* ошибка */Так как вызов lseekO возвращает обновленное значение позиции в файле,его можно использовать для поиска текущей позиции в файле, используя значениеpos, равное нулю, и значение origin, равное SEEK CUR:int pos.pos = lseek (fd. 0, SEtK_CUR),if (pos == (off_t) 1)/* ошибка */else/* 'pos' э ю іекущая позиция в файле fd */Чаще всего lseekO используют для поиска начала файла, конца файла или определениятекущей позиции в файле, связанном с данным дескриптором файла.


Услуги косметолога во владивостоке
Просмотров: 23309 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: