Инициализация в Скрипт запуска системы (Start-up (init) script)
Примечание! USB диск должен быть подключен до момента начала работы системы. Этот скрипт не поддерживает «Горячее» подключение. После того, как скрипт будет закружен в Скрипт запуска системы (Start-up (init) script), необходимо перезагрузить LogicMachine (т.к. этот скрипт запуститься только при запуске системы).
Использование
-- создаем директорию для подключения (mount) usb диска
os.execute('mkdir -p /mnt/usb')
-- находим первый подходящий usb диск
dev = io.readproc('ls /dev/sd*1 2>/dev/null'):match('/dev/sd%l1')
--если находим, то подключаем
if dev then
os.execute('mount ' .. dev .. ' /mnt/usb')
alert('[usb-mount] mounted %s', dev)
-- если ничего не нашли то будем использовать встроенную флеш память
else
alert('[usb-mount] no device found')
end
USB диск будет подключен к директории /mnt/usb.
Чтение/Запись
Для работы с файлами используются стандартные функции языка Lua . Так же можно использовать хелперы LogicMachine для чтения и записи файла целиком за один раз:
- Прочитать файл целиком, содержание файла вернется как строка, в случае ошибки функция вернет nil.
io.readfile (file)
- Запись данных в файл. Данные должны иметь тип, который может быть конвертирован в строку или храниться как таблица (table) таких типов. Когда данные хранятся в таблице, каждый элемент таблицы должен заканчиваться символом перевода строки. nil возвращается в случае, когда функция не смогла записать данные в файл.
io.writefile (file, data)
Примеры
Запишем данные пришедшего события в лог файл
value = event.getvalue()
data = string.format('%s value is %s', os.date('%c'), tostring(value))
-- запишем в конец лог файла, сохраняя предыдущие данные
file = io.open('/mnt/usb/log.txt', 'a+')
file:write(data .. '\r\n')
file:close()
Результат:
Mon Jan 3 05:25:13 2011 value is false
Mon Jan 3 05:25:14 2011 value is true
Mon Jan 3 05:25:32 2011 value is false
Mon Jan 3 05:25:33 2011 value is true
Прочитаем данные из файла ( конфигурационный файл должен быть в формате ключ = значение)
for line in io.lines('/mnt/usb/config.txt') do
-- разбиваем строку по символу '='
items = line:split('=')
-- если получили две подстроки, значит строка правильная
if #items == 2 then
key = items[ 1 ]:trim()
value = items[ 2 ]:trim()
alert('[config] %s = %s', key, value)
end
end