Горячая линия Embedded System Rus:8-800-775-06-34 (звонок по России бесплатный)

LM5_N
LM-Wall_N
DALI_N
Vita_N

Чтение/запись в файл на флеш диск, подключенный к LogicMachine

Инициализация в Скрипт запуска системы (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