Управление освещением
    Презентации
    Технические решения на LogicMachine
    Визуализация
      evika.ru    Технические решения на LogicMachine    Чтение/запись в файл на флеш диск, подключенный к LogicMachine

    Чтение/запись в файл на флеш диск, подключенный к 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




    Copyright
    © Embedded Systems Rus
    2017. All Rights Reserved