-
Notifications
You must be signed in to change notification settings - Fork 0
Lua модуль fio
Для работы с файловой системы из тарантула в него включен модуль fio
local fio = require 'fio'
local fh = fio.open(path, 'O_RDONLY')
local data = fh:read(1024)
fh:close()
Все операции выполняются асинхронно. API практически полностю соответствует семантике POSIX/syscalls:
local path = fio.pathjoin('/etc', 'default', 'myfile')
Собирает путь к файлу из частей.
local name = fio.basename('/path/to/my.lua', '.lua')
Выделяет из пути базовое имя точки и удаляет из нее суффикс (если таковой передан).
umask(tonumber('755', 8))Изменяет дефолтные права текущего процесса.
Подробности см в man 2 umask
local stat = fio.lstat('/path/to/file')
Возвращает информацию о файловом объекте. Возвращается в виде таблицы
с полями: dev, inode, mode, nlink, uid, gid, rdev, size,
blksize, blocks, ctime, mtime, atime.
Подробнее см man 2 lstat и man 2 stat.
if fio.mkdir('/path/to/dir', tonumber('0755', 8)) then
...
else
error(errno.strerror())
end
if fio.rmdir('/path/to/dir') then
...
else
error(errno.strerror())
endСоздание или удаление директории. Функции возвращают true или false в
зависимости от успешности.
Подробнее смотри в man 2 mkdir, man 2 rmdir.
local list = fio.glob('/etc/*')
Читает список файлов из директории по маске. Подробнее см. в man 3 glob.
Список строится с единственным флагом, управляющим поведением функции:
GLOB_NOESCAPE.
Возвращает список файлов или nil в случае неудачи.
Функции для работы с файловыми ссылками.
if fio.link('file1', 'newpath') then
...
end
fio.symlink('file1', 'newpath2')
local object = fio.readlink('file1')
fio.unlink('file1')Функции создания и удаления ссылок возвращают true, false в
зависимости от успеха.
readlink возвращает прочитанную ссылку или nil в случае неудачи.
Подробнее см. в man 2 readlink, man 2 link, man 2 symlink, man 2 unlink.
Функция переименования объекта в файловой системе.
if fio.rename('file1', 'newname') then
...
endПодробнее см. man 2 rename. Возвращает true или false в зависимости
от успешности операции.
Управление правами на файловые объекты, а так же изменение владельца объекта.
Возвращают true или false в зависимости от успеха.
Подробнее смотри в man 2 chown и man 2 chmod.
Важно: chown в качестве аргумента может принимать как числа (uid, gid),
так и названия групп или имена пользователей. Например:
fio.chmod(path, tonumber('0755', 8))
fio.chown(path, 'root', 'admin')Обрезание файла до заданной величины.
fio.truncate(path, size)Возвращает true, false в зависимости от успешности.
Подробнее см. в man 2 truncate.
Синхронизация дисковых изменений. Подробнее см. man 2 sync.
fio.sync()
Файл открывается при помощи функции open.
local fh = fio.open(path, flags, mode)
Где flags - это флаги с которыми нужно открыть файл. Это могут быть
как непосредственно переданное число, так и один или несколько текстовых
констант: O_RDONLY, O_WRONLY, O_RDWR и так далее.
Если нужно указать более одного флага - они объединяются в таблицу:
local fh = fio.open(path, { 'O_RDWR', 'O_APPEND' })
Функция возвращает файловый объект, либо nil в случае ошибки.
Закрытие объекта.
fh:close()
Возвращает true, false в зависимости от успешности.
Подробнее см. man 2 close.
Чтение/запись с произвольным доступом (не влияет на текущую позицию
seek в файле).
local data = fh1:pread(len, offset)
fh2:pwrite(data, offset)pwrite возвращает true, false в зависимости от успешности.
pread возвращает прочитанные данные или nil в случае неудачи.
Подробнее см. man 2 pread, man 2 pwrite.
Обычные чтение и запись. Подробности см. в man 2 read и man 2 write.
local header = fh1:read(10)
local body = fh1:read(20)
fh3:write(header .. subheader .. body)
read возвращает прочитанные данные или nil в случае неудачи.
write возвращает true или false в зависимости от успешности.
Важно: поскольку эти методы влияют на позицию seek внутри файла, то
следовательно при работе с одним файлом из множества разных файберов
Вам необходимо это учитывать. При необходимости используйте fiber.ipc для
ограничения одновременного доступа к одному файлу из разных файберов.
Изменение размера открытого файла. Подробности см. в man 2 ftruncate.
Возвращает true, false в зависимости от успешности.
fh1:truncate()
fh2:truncate(10)
Сдвиг позиции в файле к указанной.
fh1:seek(0, 'SEEK_END')
fh2:seek(123, 'SEEK_SET')
fh3:seek(123) -- the same
fh4:seek(123, 'SEEK_CUR')Подробнее см. man 2 lseek.
Возвращает итоговую позицию внутри файла или nil в случае неудачи.
То же что и fio.stat только на открытом файле.
Возвращает таблицу, описывающую параметры открытого файла.
Подробнее см. man 2 fstat.
local stat = fh:stat()
Синхронизация содержимого кешей файла с диском.
Подробнее см. man 2 fsync и man 2 fdatasync.
fh:fsync()
fh:fdatasync()Architecture Specifications
- Server architecture
- Feature specifications
- What's in a good specification
- Functional indexes
- Space _index structure
- R tree index quick start and usage
- LuaJIT
- Vinyl
- SQL
- Testing
- Performance
How To ...?
- ... add new fuzzers
- ... build RPM or Deb package using packpack
- ... calculate memory size
- ... debug core dump of stripped tarantool
- ... debug core from different OS
- ... debug Lua state with GDB
- ... generate new bootstrap snapshot
- ... use Address Sanitizer
- ... collect a coredump
Lua modules
Useful links