mc.utils 工具库
更新时间:2025/06/27
在Gitcode上查看源码

mc.utils提供了常用的公共方法,是多种工具的集合库。

加载方式

lua
local utils = require 'mc.utils'

数据类操作接口说明

utils.to_hex

描述

  • 将二进制转化为空格分割的十六进制序列

参数

参数类型描述是否必选
datastring待转化的二进制必选

返回

  • 空格分割的十六进制序列,类型为string

异常

示例

lua
local utils = require 'mc.utils'
local t1 = '\x61\x70\x70\x6C\x65\x62\x61\x6E\x61\x6E\x61\x63\x61\x74\x64\x6F\x67'
utils.to_hex(t1)
-- 输出: '61 70 70 6C 65 62 61 6E 61 6E 61 63 61 74 64 6F \n67 '

utils.calc_checksum

描述

  • 计算校验和

参数

参数类型描述是否必选
datastring待计算校验和的字符串必选

返回

  • 校验和,类型为integer

异常

示例

lua
local utils = require 'mc.utils'
local data = '\x01\x02\x03'
lu.assertEquals(utils.calc_ckecksum(data), 250) -- 校验和

utils.get_first_nonzero_pos

描述

  • 获取一个32位无符号整数中第一个非零位的位置

参数

参数类型描述是否必选
maskinteger32位无符号整数必选

返回

  • 最低有效位第一个非零位的位置,从0开始计数

异常

示例

lua
local utils = require 'mc.utils'
local pos = utils.get_first_nonzero_pos(0xff00)
lu.assertEquals(pos, 8)

utils.set_value_with_mask

描述

  • 将一个32位无符号整数中指定掩码位置的值设置为另一个32位无符号整数

参数

参数类型描述是否必选
maskinteger掩码必选
src_datainteger原始数据值必选
set_datainteger用于设置的数据,需要对齐到掩码的有效位必选

返回

  • 基于掩码修改目标数据的特定位后得到的新数据

异常

示例

lua
local utils = require 'mc.utils'
local mask_data = utils.set_value_with_mask(0xff00, 0x3456, 0x22)
lu.assertEquals(mask_data, 0x2256)

utils.get_value_with_mask

描述

  • 获取一个32位无符号整数中指定掩码位置的值

参数

参数类型描述是否必选
maskinteger掩码必选
src_datainteger原始数据值必选

返回

  • 原始数据中指定掩码位置的值

异常

示例

lua
local utils = require 'mc.utils'
local mask_data = utils.get_value_with_mask(0xff00, 0x2200)
lu.assertEquals(mask_data, 0x22)

utils.bus_mask

描述 将二进制中的某些位根据指定的掩码提取出来,并将结果作为一个新二进制返回

参数

参数类型描述是否必选
datastring字符串必选
leninteger数据长度(字节数)必选
maskinteger掩码必选

返回

  • 二进制

异常

示例

lua
local utils = require 'mc.utils'
local mask_data = utils.bus_mask('\x01\x02\x03\x04', 4, 0x1234)
lu.assertEquals(string.unpack('I4', mask_data), 0x9000000)

字符串操作接口说明

utils.split

描述

  • 字符串分割

参数

参数类型描述是否必选
datastring待分割的字符串必选

返回

  • 字符串表

异常

示例

lua
local utils = require 'mc.utils'
local data = 'apple:banana:cat'
local res = {'apple', 'banana', 'cat'}
lu.assertEquals(utils.split(data, ':'), res)
lu.assertEquals(utils.split("aaaa", '\n'), {"aaaa"})
lu.assertEquals(utils.split("", '\n'), nil)

utils.ByteTablesToString

描述

  • 将多个Lua表中的字节数据转换为一个字符串

参数

参数类型描述是否必选
tabletableLua表,数量可以为多个必选

返回

  • 转换后的字符串

异常

示例

lua
local utils = require 'mc.utils'
local str = utils.ByteTablesToString(table1, table2)

文件类操作接口说明

utils.remove_file

描述

  • 删除文件

参数

参数类型描述是否必选
pathstring待删除文件路径必选

返回

异常

示例

lua
local utils = require 'mc.utils'
utils.remove_file(path)

utils.move_file

描述

  • 移动文件

参数

参数类型描述是否必选
fromstring初始文件路径必选
tostring移动后文件路径必选

返回

异常

示例

lua
local utils = require 'mc.utils'
utils.move_file(from, to)

utils.copy_file

描述

  • 拷贝文件

参数

参数类型描述是否必选
srcstring源文件路径必选
deststring拷贝文件路径必选

返回

  • 拷贝成功返回 true,失败返回 false

异常

示例

lua
local utils = require 'mc.utils'
local is_ok = utils.copy_file(src, dest)

utils.chmod

描述

  • 修改文件权限

参数

参数类型描述是否必选
pathstring文件路径必选
fd_modeinteger文件权限必选

返回

  • 成功时返回0,失败时返回-1

异常

示例

lua
local utils = require 'mc.utils'
utils.chmod(path, fd_mode)

utils.mkdir

描述

  • 创建目录

参数

参数类型描述是否必选
pathstring目录路径必选
fd_modeinteger目录权限必选

返回

  • 成功时返回0,失败时返回-1

异常

示例

lua
local utils = require 'mc.utils'
utils.mkdir(path, fd_mode)

utils.mkdir_with_parents

描述

  • 创建目录,如果父目录不存在,则同时创建父目录

参数

参数类型描述是否必选
pathstring目录路径必选
fd_modeinteger目录权限必选

返回

  • 成功时返回0,失败时返回-1

异常

示例

lua
local utils = require 'mc.utils'
utils.mkdir_with_parents(path, fd_mode)

utils.chown

描述

  • 压缩文件修改文件属主

参数

参数类型描述是否必选
filestring文件路径必选
ownerinteger用户ID必选
groupinteger组ID必选

返回

  • 成功时返回0,失败时返回-1

异常

示例

lua
local utils = require 'mc.utils'
utils.chown(file, owner, group)

utils.realpath

描述

  • 将路径转化为绝对路径

参数

参数类型描述是否必选
filepathstring文件路径必选

返回

  • 成功时返回转化后的路径,失败时抛异常

异常

  • 转化失败时,使用luaL_error抛异常,报错提示为"realpath failed"

示例

lua
local utils = require 'mc.utils'
local ok, real_path = pcall(utils.realpath, filepath)

utils.feof

描述

  • 判断一个文件是否到达文件末尾

参数

参数类型描述是否必选
file文件句柄待判断文件必选

返回

  • 判断结果,类型为boolean

异常

示例

lua
local utils = require 'mc.utils'
local is_eof = utils.feof(file)

utils.FileLock

描述

  • 文件锁,详见flock方法说明

参数

参数类型描述
filestring文件路径

示例

lua
local utils = require 'mc.utils'
-- 共享锁
local lock = utils.FileLock.shared(file)
-- 互斥锁
local lock = utils.FileLock.exclusive(file)
-- 解锁
lock:close()

utils.flock

描述

  • 文件锁定。接受一个文件句柄作为参数,并根据传入的参数来执行不同的文件锁定操作。使用 luaL_checkoption 函数来检查传入的第二个参数,并根据参数值选择不同的锁定操作。参数值可以是 sharedunlockexclusive ,分别对应共享锁、解锁和独占锁。如果传入了第三个参数且其值为真,则表示非阻塞锁定

参数

参数类型描述是否必选
file文件句柄文件必选
operationstring操作类型,可以是sharedunlockexclusive必选
is_blockingboolean是否非阻塞锁定可选

返回

异常

  • 若接受到无效的文件句柄,将抛异常,报错提示为 "file handle is closed"

示例

lua
-- 以两个参数的情况为例
local utils = require 'mc.utils'
local ok = pcall(utils.flock, file, 'shared')

压缩包操作接口说明

utils.tar_zip

描述

  • 压缩文件

参数

参数类型描述是否必选
sourcedirstring源文件所在目录必选
sourcefilestring待压缩文件名必选
destfilestring压缩后文件名必选

返回

异常

示例

lua
local utils = require 'mc.utils'
utils.tar_zip(sourcedir, sourcefile, destfile)

utils.tar_unzip

描述

  • 解压文件

参数

参数类型描述是否必选
sourcefilestring待解压文件路径必选
destdirstring解压目标目录必选

返回

异常

示例

lua
local utils = require 'mc.utils'
utils.tar_unzip(sourcefile, destdir)

utils.before_unzip_check

描述

  • 防zip炸弹检查,列出详细的解压后的文件大小和文件名,并做如下校验:
  • 解压后文件总大小判断小于 toobig_size
  • 解压后文件总数量判断小于 toomany_num
  • 文件路径的合法性校验

参数

参数类型描述是否必选
sourcefilestring待解压文件路径必选
toobig_sizenumber文件总大小上限必选
toomany_numinteger文件总数量上限必选

返回

  • 判断结果,类型为boolean

异常

示例

lua
local utils = require 'mc.utils'
local is_ok = utils.before_unzip_check(sourcefile, toobig_size, toomany_num)

utils.secure_tar_unzip

描述

  • 安全解压文件,用于解压gzip、bzip2格式的压缩包,解压文件数量和大小的限制由业务进行输入约束

参数

参数类型描述是否必选
sourcefilestring待解压文件路径必选
destdirstring解压目标目录必选
toobig_sizenumber解压后文件总大小上限必选
toomany_numinteger解压后文件总数量上限必选

返回

  • 解压成功返回 true,失败返回 false

异常

示例

lua
local utils = require 'mc.utils'
utils.secure_tar_unzip(sourcefile, destdir, toobig_size, toomany_num)

utils.unzip_s

描述

  • 安全解压文件,用于解压zip格式的压缩包,解压文件数量和大小的限制由业务进行输入约束

参数

参数类型描述是否必选
sourcefilestring待解压文件路径必选
destdirstring解压目标目录必选
toobig_sizenumber解压后文件总大小上限必选
toomany_numinteger解压后文件总数量上限必选

返回

  • 解压成功返回 true,失败返回 false

异常

示例

lua
local utils = require 'mc.utils'
local is_ok = utils.unzip_s(sourcefile, destdir, toobig_size, toomany_num)

时间类操作接口说明

utils.time_ms

描述

  • 获取系统启动时间

参数

返回

  • 系统启动时间,单位为毫秒,类型为integer

异常

示例

lua
local utils = require 'mc.utils'
local st = utils.time_ms()

utils.date_format

描述

  • 格式化日期,能够将整数或字符串时间戳转换为可读的日期时间字符串

参数

参数类型描述是否必选
src_datastring 或者 integer时间戳必选
formatstring日期格式字符串必选
zone_existboolean是否附加时区字符串必选

返回

  • 日期时间字符串

异常

示例

lua
local utils = require 'mc.utils'
local time = utils.date_format(Timestamp, '%Y-%m-%d %H:%M:%S', false)

utils.get_timestamp

描述

  • 根据日期获取时间戳

参数

参数类型描述是否必选
yearinteger必选
monthinteger必选
dayinteger必选
hourinteger必选
minuteinteger必选
secondinteger必选

返回

  • 时间戳,类型为integer

异常

示例

lua
local utils = require 'mc.utils'
utils.get_timestamp(year, month, day, hour, minute, second)

utils.time

描述

  • 获取当前系统时间

参数

返回

  • 当前系统时间,类型为包含"tv_sec"和"tv_nsec"两个键的表

异常

示例

lua
local utils = require 'mc.utils'
local current_time = utils.time()

utils.usleep

描述

  • 使用C语言的 usleep 函数来实现让当前线程休眠指定的微秒数

参数

参数类型描述是否必选
timeinteger线程休眠指定的微秒数必选

返回

  • 成功时返回0,失败时返回-1

异常

示例

lua
-- 以休眠 100000 微秒为例
local utils = require 'mc.utils'
utils.usleep(100000)

utils.msleep

描述

  • 让当前线程休眠指定毫秒

参数

参数类型描述是否必选
timeinteger线程休眠指定的毫秒数必选

返回

  • 成功时返回0,失败时返回-1

异常

示例

lua
-- 以休眠 100 毫秒为例
local utils = require 'mc.utils'
utils.sleep(100)

表操作接口说明

utils.get_table_node

描述

  • get_table_node(tb, index, ...)
  • 从表中取数据,中途遇到节点为nil则直接返回nil

参数

参数类型描述是否必选
tbtable待取数据的表必选
indextable键,可以为字符串、数字等数据索引,若有多个索引,将逐层访问嵌套表中的字段必选

返回

  • 根据索引返回表中数据,例如get_table_node(tb, index1, index2)正常返回tb[index1][index2],若无该节点则返回nil

异常

示例

lua
local utils = require 'mc.utils'
local data = {'a', 'b', 'c', 'd'}
lu.assertEquals(utils.get_table_node(data, 1), 'a')
lu.assertEquals(utils.get_table_node(data, 5), nil)

utils.add_table_node

描述

  • add_table_node(tb, object, index, ...)
  • 往表里添加数据,遇到父节点为nil则创建父节点

参数

参数类型描述是否必选
tbtable待添加数据的表必选
object可以为字符串、数字等添加的数据必选
indextable键,可以为字符串、数字等数据索引,若有多个索引,将逐层访问嵌套表中的字段必选

返回

异常

示例

lua
local utils = require 'mc.utils'
local data = {'a', 'b', 'c', 'd'}
local res = {'a', 'e', 'c', 'd'}
utils.add_table_node(data, 'e', 2)
lu.assertEquals(data, res)

utils.remove_table_node

描述remove_table_node(tb, index, ...)

  • 从表里删除数据,中途遇到节点为nil则提前返回

参数

参数类型描述是否必选
tbtable待删除数据的表必选
indextable键,可以为字符串、数字等数据索引,若有多个索引,将逐层访问嵌套表中的字段必选

返回

  • 被删除节点的数据

异常

示例

lua
local utils = require 'mc.utils'
local data = {'a', 'b', 'c', 'd'}
local res = {'a', [3] = 'c', [4] = 'd'}
lu.assertEquals(utils.remove_table_node(data, 2), 'b')
lu.assertEquals(data, res)

utils.merge_array

描述

  • 合并数组

参数

参数类型描述是否必选
atable待合并数组1必选
btable待合并数组2必选

返回

  • 合并后的数组

异常

示例

lua
local utils = require 'mc.utils'
local a = {1, 2, 3}
local b = {4, 5}
lu.assertEquals(utils.merge_array(a, b), {1, 2, 3, 4, 5})

utils.merge_table

描述

  • 合并表

参数

参数类型描述是否必选
atable待合并表1必选
btable待合并表2必选

返回

  • 合并后的表

异常

示例

lua
local utils = require 'mc.utils'
local a = {"k1" = "v1", "k2" = "v2"}
local b = {"k3" = "v3"}
lu.assertEquals(utils.merge_table(a, b), {"k1" = "v1", "k2" = "v2", "k3" = "v3"})

utils.array_contains

描述

  • 判断数组中是否包含元素

参数

参数类型描述是否必选
arraytable数组必选
element数字、字符串等Lua类型元素必选

返回

  • 判断结果,类型为boolean

异常

示例

lua
local utils = require 'mc.utils'
local data = {1, 2, 3, 4, 5}
lu.assertEquals(utils.array_contains(data, 5), true)
lu.assertEquals(utils.array_contains(data, 6), false)

其他工具接口说明

utils.convert_number

描述

  • 将数字从一种类型转换为另一种类型

参数

参数类型及描述是否必选
original_typestring原始类型,若原始类型为 number,则该参数应为'd'
original_value类型与original_type对应原始值
converted_typestring转换后的类型,若转换后的类型为 number,则该参数应为'd',若转换后的类型为integer,该参数需为 'y'、'n'、'q'、'i'、'u'、'x'、't'中的一种,若转换后的类型为string,该参数为's',若转换后的类型为boolean,该参数为'b';

返回

  • 转换后的值,类型与converted_type相对应

异常

示例

lua
local utils = require 'mc.utils'
local num = utils.convert_number(original_type, original_value, converted_type)

utils.sched_yield

描述

  • 使当前线程放弃CPU的使用权,以便其它线程有机会执行。通过调用该函数,可以实现线程主动让出CPU的操作,以提高系统的并发性能

参数

返回

异常

示例

lua
local utils = require 'mc.utils'
utils.sched_yield()

utils.rsyslog_reload_config

描述

  • 重新加载rsyslog配置文件

参数

返回

异常

示例

lua
local utils = require 'mc.utils'
utils.rsyslog_reload_config()

utils.decode_xml

描述

  • 解析xml数据放入表中

参数

参数类型描述是否必选
strstringxml数据必选

返回

  • 解析得到的表

异常

示例

lua
local utils = require 'mc.utils'
utils.decode_xml(s)