mva
для меня, правда, всё ещё загадка почему он в lsof не попадается как держащий файл открытым?... Открывает-закрывает его постоянно, чтоли?...
Anonymous
Полл для трех файлов просто же делается, но нужны их дескрипторы
Anonymous
немного оффтопа по поводу утилиты что писали со снусом:
Подумал я такой, "дрочить файлики в sysfs - такое себе извращение, надо лучше посмотреть как делают это сишные утилиты и либы и воспользоваться тем, что я пишу на luajit'е.
Ага, конечно.
Вроде бы даже и нашёл в одной такой утилите что она не держит эти файлы открытыми, а вместо этого у ней открыт netlink-интерфейс.
О, думаю, збс.
Открываю исходники и вижу...
filename = g_build_filename (g_udev_device_get_sysfs_path (dev), attribute, NULL);
if (g_file_get_contents (filename, &contents, NULL, NULL)) {
result = atoi (contents);
g_free (contents);
}
g_free (filename);
MFW 😢
А чо за префикс г, это глиб чтоли?
mva
Да
Anonymous
Anonymous
Кто нибудь пытался подружить луа с libffi?
vitaly
есть же готовые решениея
vitaly
к luajit
vitaly
там нужно понимать как си программы работают
vitaly
под винду или линукс?
Alexey
Alien вполне работает под win
Anonymous
Alien is based on libffi
Anonymous
Это интересно
vitaly
Anonymous
how do I upload a file to the host in lua?
Anonymous
Shakhzod
http
Please ask more concrete question.
Probably you are asking how to upload a file using multipart/form-data.
See here: https://stackoverflow.com/questions/913626/what-should-a-multipart-http-request-with-multiple-files-look-like
And refer here: https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html
Shakhzod
Don’t forget to generate random boundary and set it on header: Content-Type: multipart/form-data; boundary=<your_random_boundary>
Anonymous
http = require("socket.http")
ltn12 = require("ltn12")
http.request{
url = "url://to.server/upload/script.php",
method = "POST", headers = { ["Content-Type"] = "multipart/form-data",
["Content-Length"] = sizeOfFile
},
source = ltn12.source.file(io.open(pathToLocalFile)),
sink = ltn12.sink.table(response_body) } print(response_body[1])
Snusmumriken
Also read how HTTP works.
Wikipedia is your best friend: https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#POST
Snusmumriken
Luasocket-http only transforms your table-request ({url='bla-bla', verb='bla'}) into http-request string, sends it and parse received response.
Alex
Добрый вечер.
Помогите пожалуйста преобразовать строку вида;
Тест-Тестт=2018-09-24, Бета-Гамма=2018-09-23
в таблицу:
где до "=" это key, после "=" value
Alex
local tableMessages = {}
for k, v in string.gmatch(rawLocks, "(%w+)=(%w+)") do
tableMessages[k] = v
end
что-то вроде этого, но похоже я мапинг не верный делаю
Snusmumriken
Ууу, кириллица
Alex
ага ( я уже прочитал, что %w+ к кирилице не имеет отношения
Snusmumriken
Не пытайся оперировать классами типа %w во всём не-ascii, да.
Alex
поэтому меняем вопрос на то как написать для этого регулярку
Snusmumriken
Плюс %w+ на test-test выдаст только test. Символ дефиса - не слово ))
Snusmumriken
Карочи, оно может выгдялеть примерно так:
for keyval in (str .. ','):gmatch('(.-),%s?') do
local key, value = keyval:match('(.-)=(.*)')
if key then
...
end
end
Alex
регулярки мое слабое место )
В некоторых ЯП есть пословица: "Если у тебя была проблема и ты решил её регуляркой, то у тебя стало 2 проблемы"
НО lua не обладает split функцией )
Snusmumriken
Вот я написал тебе split по [, ]
Alex
Сейчас попробую, спасибо
Snusmumriken
function split(str, delm)
delm = delm or ' '
local res = {}
for item in (str .. delm):gmatch('(.-)'..delm) do
res[#res + 1] = item
end
return res
end
Snusmumriken
Это тот же split, но в первом варике - более узкоспециализированный и сразу ищущий key-value.
Alex
Благодарю, то что нужно. На не ascii тоже данный вариант будет работать?
mva
http
did you tried lua-cURL?
mva
Snusmumriken
mva
можно, кстати, даже объявить это как string:split
mva
тогда можно будет делать ("foo,bar"):split(",")
Snusmumriken
Можно. И у строк даже появится метод.
Но снус не любит модифицировать стандартную библиотеку, считает это муветоном.
Потому что эта штука автоматически становится глобальной, и ищи дальше: где скрипт был зареквайрен, а где нет.
Snusmumriken
Так что это более-менее нормально в конкретном проекте, где типа есть файл-заголовок, гарантированно реквайрящий ништяки на старте, но хреново в виде библиотеки, например.
mva
ну, я обычно во входном скипте (каком-нибудь init.lua) делаю string=require"my_super_string_extension_library" (имя от балды) и тогда оно наследуются во все скрипты, которые вызываются далее :)
Snusmumriken
Ну вот это я обозначил "заголовочным файлом проекта".
Snusmumriken
Но если тебе в каком-то скрипте понадобится переопределённый string.split, не стоит его подменять, лучше сделать отдельный ))
Ну, вне заголовочных файлов не балуем, типа.
А то ошибки шрёдингера.
Я уже сталкивался с тем, что
скрипт A реквайрит скрипт Б, скрипт Б объявляет глобальную переменную и рекварит скрипт В, где глобальная переменная меняется, и скрипт Г, где она используется.
Хвостов не найти.
Snusmumriken
Приходилось извращаться с вешаньем метатаблицы на _G, с __newindex - проверкой на ту переменную, если это она - занесением её в другое место и логированием "по такому-то трейсбеку была изменена переменная", и __index - выуживание её из другого места.
Snusmumriken
И это был полный кошмар, скажу я вам ))
Никогда не делайте такого на проде.
Snusmumriken
ShadoWalkeR
Snusmumriken
#define true (rand() > 0.5)
ShadoWalkeR
#define true (rand() > 0.5)
#define false (rand() < 0.5)
ShadoWalkeR
Программа гейзенберга
Snusmumriken
Качество работы программы задаётся зерном.
Snusmumriken
Нам осталось всего лишь найти такое зерно, чтобы программа исполнилась как мы хотим.
Snusmumriken
Или запустить её в нужное время : )
ShadoWalkeR
Если оно быдет вычисляться в момент выполнения то не поможет)
ShadoWalkeR
Хотя если привязать это к в включению/выключению дебага то полностью квантмех реализуем - как только мы начинаем наблюдать выполнение программы оно становится повторимым)
Snusmumriken
Anonymous
Похоже на задачу из кряклаба
Anonymous
С помощью ld_preload заменить ранд
Anonymous
И программа заработает
Anonymous
Кстати никто не правил вручную эльф-бинарники?
mva
patchelf
mva
он для этого и создавался
Anonymous
Мне интересно, если в секции rel.dyn указать адрес произвольной функции
Anonymous
Да, патчельф хорошая программа
ShadoWalkeR
Я только so правил чтобы программа подхватывала несистемный glibc
Anonymous
Ну тоже подходит
Anonymous
А как ты сделал?
ShadoWalkeR
Прогулялся по граблям особенности работы yum/rpm в центосе изза этого)
Anonymous
Я просто с релокациями пытаюсь разобраться
Anonymous
Не понятно, как пакетный менеджер влияет :)
ShadoWalkeR
У меня простая задача было - я собрал нужную версию glibc - в центосе 2.12 была, а мне нужна 2.14. Собственно в скачанной so использовался симлинк glibc.so.6, поэтому я рядом с системным положил собранный glibc, создал на него симлинк glibc.so.7 и поправил цифру в soшке
mva
@ShadoWalkeR31 зря
Anonymous
Понял