* added streaming i/o for scripting, and a byteutil.get_size function
* added i/o stream class, also added named pipes support on lua side via ffi
* added constant file.named_pipes_prefix
* added buffered and yield modes for io_stream
* added new time function for work with UTC - utc_time, utc_offset, local_time
* docs updated
* constant pid moved to os.pid
* now gmtime_s and localtime_s used only in windows
@@ -258,3 +258,9 @@ function sleep(timesec: number)
```
Вызывает остановку корутины до тех пор, пока не пройдёт количество секунд, указанное в **timesec**. Функция может быть использована только внутри корутины.
```lua
os.pid->number
```
Константа, в которой хранится PID текущего инстанса движка
**default** - Дефолтный режим работы потока. При read может вернуть только часть от требуемых данных, при write сразу записывает данные в поток.
**yield** - Почти тоже самое, что и **default**, но всегда будет возвращать все требуемые данные. Пока они не будут прочитаны, будет вызывать `coroutine.yield()`. Предназначен для работы в корутинах.
**buffered** - Буферизирует записываемые и читаемые данные.
При вызове `available`/`read` обновляет буфер чтения.
После обновления в `read`, если буфер чтения переполнен, то бросает ошибку `buffer overflow`.
Если требуемого кол-ва байт недостаточно в буфере для чтения, то бросает ошибку `buffer-underflow`.
При вызове `write` записывает итоговые байты в буфер для записи. Если он переполнен, то бросает ошибку `buffer overflow`.
При вызове `flush` проталкивает данные из буфера для записи в напрямую в поток
### flush
**all** - Сначала проталкивает данные из буфера напрямую в поток (если используется **buffered** режим), а после вызывает `flush` напрямую из библиотеки
**buffer** - Только проталкивает данные из буфера в поток (если используется **buffered** режим)
## Методы
Методы, позволяющие изменить или получить различные режимы поведения потока
```lua
-- Возвращает true, если поток используется в двоичном режиме
io_stream:is_binary_mode()--> bool
-- Включает или выключает двоичный режим
io_stream:set_binary_mode(bool)
-- Возвращает режим работы потока
io_stream:get_mode()--> string
-- Задаёт режим работы потока. Выбрасывает ошибку, если передан неизвестный режим
io_stream:set_mode(string)
-- Возвращает режим работы flush
io_stream:get_flush_mode()--> string
-- Задаёт режим работы flush
io_stream:set_flush_mode(string)
```
I/O методы
```lua
--[[
Читает данные из потока
В двоичном режиме:
Если arg - int, то читает из потока arg байт и возвращает ввиде Bytearray или таблицы, если useTable = true
Если arg - string, то функция интерпретирует arg как шаблон для byteutil. Прочитает кол-во байт, которое определено шаблоном, передаст их в byteutil.unpack и вернёт результат
В текстовом режиме:
Если arg - int, то читает нужное кол-во строк с окончанием CRLF/LF из arg и возвращает ввиде таблицы. Также, если trimEmptyLines = true, то удаляет пустые строки с начала и конца из итоговой таблицы
Если arg не определён, то читает одну строку с окончанием CRLF/LF и возвращает её.
Методы, имеющие смысл в использовании только в buffered режиме
```lua
--[[
Если length определён, то возвращает true, если length байт доступно к чтению. Иначе возвращает false
Если не определён, то возвращает количество байт, которое можно прочитать
--]]
io_stream:available(
[опционально]length:int
)--> int | bool
-- Возвращает максимальный размер буферов
io_stream:get_max_buffer_size()--> int
-- Задаёт новый максимальный размер буферов
io_stream:set_max_buffer_size(max_size:int)
```
Методы, контролирующие состояние потока
```lua
-- Возвращает true, если поток открыт на данный момент
io_stream:is_alive()--> bool
-- Возвращает true, если поток закрыт на данный момент
io_stream:is_closed()--> bool
-- Закрывает поток
io_stream:close()
--[[
Записывает все данные из write-буфера в поток в buffer/all flush-режимах
Вызывает ioLib.flush() в all flush-режиме
--]]
io_stream:flush()
```
Создание нового потока
```lua
--[[
Создаёт новый поток с переданным дескриптором и использующим переданную I/O библиотеку. (Более подробно в core:io_stream.lua)
--]]
io_stream.new(
descriptor:int,
binaryMode:bool,
ioLib:table,
[опционально]mode:string="default",
[опционально]flushMode:string="all"
)->io_stream
```
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.