Раздел: CronosPRO Дата редакции: 15.07.2013 id статьи: 1555

Библиотека ввода/вывода в Lua

Библиотека ввода-вывода предоставляет два различных «стиля» для работы с файлами.

Использование неявных дескрипторов файлов

Существуют операции для установки стандартных (используемых по умолчанию) файлов ввода и файлов вывода, и все операции ввода/вывода работают с этими файлами. Функции для работы с неявными дескрипторами собраны в таблице io.

Для вызова функций используется запись вида:

io.имя_функции(...)

Например:

io.close()
Ниже приведён список стандартных функций ввода/вывода, предоставляемых таблицей io:
Имя функции Описание
open Открывает файл в заданном режиме.
input При вызове с указанием имени файла, открывает данный файл (в текстовом режиме), и направляет его поток на стандартный поток ввода. При вызове с дескриптором файла, делает дескриптор файла стандартным дескриптором ввода (перенаправляет поток, соответствующий дескриптору файла, на стандартный поток ввода). При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки.
output Аналогична io.input, но работает со стандартным файлом вывода.
close Закрывает файл. Эквивалентна file:close. Вызванная без параметра, закрывает стандартный файл вывода.
read Аналогична io.input():read.
lines Открывает файл с заданным именем в режиме чтения и возвращает функцию-итератор (iterator function), которая при каждом последующем вызове возвращает новую строчку из файла. При обнаружении функцией-итератором конца файла, она возвращает nil (для окончания цикла) и автоматически закрывает файл. Вызов io.lines без указания имени файла эквивалентен io.input():lines(); таким образом, он обрабатывает строки стандартного файла ввода. В этом случае файл по окончанию итераций не закрывается автоматически.
write Эквивалентна io.output():write.
flush Сохраняет все данные, записанные в стандартный поток вывода. Эквивалентна file:flush для стандартного потока вывода.
tmpfile Возвращает дескриптор для временного файла. Этот файл открывается в режиме изменения и автоматически удаляется при завершении программы.
type Проверяет, является ли объект, переданный функции в качестве параметра, корректным дескриптором файла. Возвращает строку «file», если объект является открытым дескриптором файла; строку «closed file» — если объект является закрытым дескриптором файла; nil — если объект не является дескриптором файла.

Использование явных дескрипторов файлов

При использовании явных файловых дескрипторов сначала создаётся объект-дескриптор file (для этого используется функция io.open), после чего все операции с файлом выполняются при помощи методов данного дескриптора.

Для вызова методов используется запись вида:

handle:имя_метода(...),

где handle — имя переменной, содержащей объект-дескриптор.

Ниже приведён список стандартных функций ввода/вывода, предоставляемых объектом file:

Имя функции Описание
read Читает данные из файла в соответствии с заданными форматами.
lines Возвращает функцию-итератор, которая при каждом вызове возвращает новую строку из файла. В отличие от io.lines , эта функция не закрывает файл по окончании цикла (т. е. достижении конца файла). При вызове функции без параметров, возвращает текущий файл ввода по умолчанию. В случае ошибок, данная функция возбуждает ошибку вместо того, чтобы возвратить код ошибки.
write Записывает в файл значения всех своих аргументов.
flush Сохраняет все данные, записанные в файл.
setvbuf Устанавливает режим буферизации для выходного файла.
seek Устанавливает текущую позицию в файле.
close Закрывает файл.

Обратите внимание