среда, 28 января 2015 г.

lua: получить размер файла

=========== funcs.lua
function fsize (file)
        local current = file:seek()      -- get current position
        local size = file:seek("end")    -- get file size
        file:seek("set", current)        -- restore position
        return size
end
=========== checklibs.lua
dofile("funcs.lua")

libs_file = io.open("librt.so.0","r")
print(fsize(libs_file))
libs_file:close()
===========

http://lua-users.org/lists/lua-l/2011-04/msg00785.html

Вероятный оригинал
http://www.lua.org/pil/21.3.html

В таком виде и гуляет функция fsize, даже с nginx связали
https://gist.github.com/perusio/2133228
location ~* \.(?:gif|jpe?g|png)$ {
set_by_lua $img_file_size '
function fsize (file)
local current = file:seek() -- get current position
local size = file:seek("end") -- get file size
file:seek("set", current) -- restore position
return size
end
fsize(ngx.var.request_filename)';
}

lua и sha*

В luarocks есть sha1 и sha2, в sha2 есть SHA-244, SHA-256, SHA-384, SHA-512
Требует сборки.

SHA-256 hashing algorithm by GravityScore
SHA-256 hashing algorithm by KillaVanilla
Завязаны на библиотеку bit, которая в 5.2 почему-то оказалась недоступна.

Совсем простой метод через openssl
function sysexec (str)
        local h = io.popen(str)
        local result = h:read("*a")
        h:close()
        result = string.gsub(result, "\n", "")
        return result
end

string1 = "encodeme"
run = "echo " .. string1 .. " | openssl sha256 | sed 's#(stdin)= ##'"
string2 = sysexec(run)