
- •Обработка ошибок и отладка
- •Управление таблицами
- •Управление мета-таблицами
- •Обход механизма метаметодов
- •Управление контекстом функций
- •Загрузка и выполнение кода
- •Сборщик мусора
- •Стандартные библиотеки
- •Математическая библиотека
- •Управление таблицами
- •Вставка и удаление
- •Сортировка
- •Внутреннее представление
- •Поиск и замена
- •Паттерны
- •Ввод/вывод
- •Открытие файловых дескрипторов
- •Переназначение умалчиваемых потоков
- •Форматные строки
- •Операции с файлами
- •Системные вызовы Общие функции
- •Управление файлами
- •Дата и время
- •Другие возможности
- •Базовая библиотека
- •Стандартные библиотеки
Ввод/вывод
Пакет io поддерживает две модели ввода/вывода. В первой модели используются умалчиваемые потоки ввода и вывода, которые можно назначить на заданные файлы. Во второй модели каждому файлу соответствует дескриптор и операции ввода/вывода производятся с этим дескриптором. Также таблица io содержит открытые по умолчанию файловые дескрипторы io.stdin, io.stdout и io.stderr.
Открытие файловых дескрипторов
io.open(filename [, mode])
Открывает файл и возвращает файловый дескриптор или nil, сообщение об ошибке и номер ошибки при неудаче.
Допустимые режимы:
'r' чтение 'w' запись 'a' добавление 'r+' обновление с сохранением 'w+' обновление с очисткой 'a+' добавление и обновление с сохранением |
Строка режима может содержать на конце букву 'b', что означает открытие файла в бинарном режиме.
io.popen(prog [, mode])
Запускает процесс prog и возвращает файл, связанные с потоком ввода (если mode == 'w') или потоком вывода (если mode == 'r', значение по умолчанию) запущенного процесса.
io.tmpfile()
Возвращает файловый дескриптор временного файла.
Переназначение умалчиваемых потоков
io.input([file])
Устанавливает умалчиваемый поток ввода на переданный дескриптор. Если функция вызвана без аргументов, то она возвращает умалчиваемый дескриптор.
io.output([file])
Аналогична io.input(), но устанавливает умалчиваемый поток вывода.
Этим функциям в качестве аргумента можно передавать непосредственно имя файла. В этом случае файл будет открыт в текстовом режиме, но в случае ошибки не происходит возврата кода ошибки.
Форматные строки
При чтении из файла используются следующие форматные строки:
'*all'
Чтение всего файла целиком с текущей позиции. При попытке чтения за концом файла и для пустого файла возвращается пустая строка.
'*line'
Чтение одной строки (символа конца строки не добавляется в строку). При попытке чтения за концом файла возвращается nil. Это — умалчиваемое поведение для функций чтения.
'*number'
Чтение числа. В случае неудачи возвращает nil.
ddd
Чтение не более чем заданного числа (ddd) символов. При попытке чтения за концом файла (если не удалось прочитать ни одного символа) возвращается nil. При num = 0 возвращается пустая строка или nil, если достигнут конец файла.
Операции с файлами
Описанные ниже функции присутствуют как в самом пакете io, так и в каждом дескрипторе файла, поэтому здесь они описаны безотносительно контекста вызова. Например, функция read() для умалчиваемого потока ввода вызывается как io.read(), а для файлового дескриптора как file:read().
read(fmt1, ...)
Читает данные в соответствии со строками формата. Каждой строке формата соответствует одно возвращаемое значение.
lines()
Возвращает функцию-итератор по строкам потока ввода.
write(v1, ...)
Пишет данные в поток вывода. Умеет писать только числа и строки, а для остальных типов данных нужно явно использовать функции tostring() и string.format(). Не добавляет в выходной поток разделители полей и завершители строк.
flush()
Сбрасывает буфер потока.
close()
Закрывает поток.
В случае умалчиваемых потоков функции flush() и close() относятся к потоку вывода.
Функции io.lines() также можно передать имя файла. В этом случае файл будет открыт в текстовом режиме, а после чтения последней строки файл будет автоматически закрыт. При этом не происходит замены умалчиваемого потока ввода.
Дополнительно файловые дескрипторы имеют функцию seek():
file:seek([base] [, offset])
Устанавливает текущую позицию в файле. Смещение offset задает позицию относительно базы, задаваемой параметром base:
"set" от начала файла "cur" от текущей позиции "end" от конца файла |
При успехе возвращает абсолютную позицию в файле, а при неудаче — nil и сообщение об ошибке. Умалчиваемые значения base = "cur", offset = 0.
Вызов этой функции без параметров возвращает текущую позицию в файле, вызов file:seek("set") позиционирует указатель на начало файла, вызов file:seek("end") позиционирует указатель на конец файла и возвращает его размер.