mc.utils_core 工具库
更新时间:2025/06/27
在Gitcode上查看源码mc.utils_core
提供了常用c库的lua封装方法。
加载方式
lua
local utils_core = require 'mc.utils_core'
接口说明
utils_core.getcwd
描述
- 获取当前工作目录的路径。它使用了C语言的getcwd函数来获取当前工作目录,并将结果以字符串的形式压入栈中返回
参数
- 无
返回
- 工作目录字符串
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local data_dir = utils_core.getcwd()
utils_core.chdir
描述
- 改变当前工作目录。使用C语言的chdir函数来改变当前工作目录。如果chdir函数返回非零值,表示目录切换失败,函数会抛出一个lua错误,错误信息包含了具体的错误描述和错误码。
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
dir | string | 切换到的工作目录 | 必选 |
返回
- 无
异常
- 若切换失败,将抛异常
示例
lua
local utils_core = require 'utils.core'
local ok = pcall(utils_core.chdir, dir)
utils_core.stat
描述
- 获取指定文件的状态信息(如文件类型、权限、大小、修改时间等),并将这些信息以Lua table的形式返回给调用者。
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
file_name | string | 待获取信息的文件 | 必选 |
返回
- 无
异常
- 若获取文件状态信息失败,将抛异常,报错提示为
"get file stat failed"
示例
lua
local utils_core = require 'utils.core'
local ok, file_stat = pcall(utils_core.stat, file_name)
utils_core.stat_s
描述
stat
方法的安全实现。获取指定文件的状态信息(如文件类型、权限、大小、修改时间等),并将这些信息以Lua table的形式返回给调用者。
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
file_name | string | 待获取信息的文件 | 必选 |
返回
- 无
异常
- 若获取文件状态信息失败,将抛异常,报错提示为"get file stat failed"
示例
lua
local utils_core = require 'utils.core'
local ok, file_stat_s = pcall(utils_core.stat_s, file_name)
utils_core.statfs
描述
- 获取指定文件路径的文件系统信息
statfs
,并将获取到的信息以Lua table的形式返回给调用者,返回的table包含了文件系统类型、块大小、总块数、可用块数、可用块数(非超级用户)、总文件数和可用文件数。
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
file_name | string | 待获取信息的文件 | 必选 |
返回
- 无
异常
- 若获取文件状态信息失败,将抛异常,报错提示为
"get file statfs failed"
示例
lua
local utils_core = require 'utils.core'
local ok, file_statfs = pcall(utils_core.statfs, file_name)
utils_core.setenv
描述
- 设置环境变量
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
name | string | 环境变量的名称 | 必选 |
value | string | 环境变量待设置值 | 必选 |
overwrite | boolean | 是否覆盖已存在的环境变量 | 必选 |
返回
- 成功时返回0,失败时返回-1
异常
- 无
示例
lua
local utils_core = require 'utils.core'
utils_core.setenv(name, value, overwrite)
utils_core.getenv
描述
- 获取操作系统环境变量的值
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
name | string | 环境变量的名称 | 必选 |
返回
- 操作系统环境变量的值,类型为string
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local env = utils_core.getenv(name)
utils_core.setgid
描述
- 设置进程的有效组ID(Effective Group ID)
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
id | integer | 待设置的进程有效组ID值 | 必选 |
返回
- 成功时返回0,失败时返回-1
异常
- 无
示例
lua
local utils_core = require 'utils.core'
utils_core.setgid(id)
utils_core.setuid
描述
- 设置用户ID(User ID)
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
id | integer | 待设置的用户ID值 | 必选 |
返回
- 成功时返回0,失败时返回-1
异常
- 无
示例
lua
local utils_core = require 'utils.core'
utils_core.setuid(id)
utils_core.getgid
描述
- 获取当前进程的组ID(Group ID)
参数
- 无
返回
- 当前进程的组ID,类型为integer
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local gid = utils_core.getgid()
utils_core.getuid
描述
- 获取当前进程的用户ID(User ID)
参数
- 无
返回
- 当前进程的用户ID,类型为integer
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local uid = utils_core.getuid()
utils_core.gettid
描述
- 获取当前线程的线程ID(Thread ID)
参数
- 无
返回
- 当前线程的线程ID,类型为integer
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local tid = utils_core.gettid()
utils_core.getpid
描述
- 获取当前进程的进程ID(Process ID)
参数
- 无
返回
- 当前进程的进程ID,类型为integer
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local pid = utils_core.getpid()
utils_core.is_dir
描述
- 判断指定路径是否为目录
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
path | string | 路径 | 必选 |
返回
- 判断结果,类型为boolean
异常
- 无
示例
lua
local utils_core = require 'utils.core'
lu.assertEquals(utils_core.is_dir(path), true)
utils_core.is_file
描述
- 判断指定路径是否为文件
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
path | string | 路径 | 必选 |
返回
- 判断结果,类型为boolean
异常
- 无
示例
lua
local utils_core = require 'utils.core'
lu.assertEquals(utils_core.is_file(path), true)
utils_core.dir
描述
- 打开指定路径的目录
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
path | string | 路径 | 必选 |
返回
- 文件列表,类型为table
异常
- 若打开目录失败,将抛异常
示例
lua
local utils_core = require 'utils.core'
local is, file_list = pcall(utils_core.dir, path)
utils_core.file_set_contents
描述
- 将字符串内容写入文件
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
path | string | 文件路径 | 必选 |
data | string | 待写入字符串 | 必选 |
返回
- 文件列表,类型为table
异常
- 设置异常会报错,报错提示为
"g_file_set_contents failed, ErrCode: %d, ErrMsg: %s"
示例
lua
local utils_core = require 'utils.core'
local ok = pcall(utils_core.file_set_contents, path, data)
utils_core.inflate
描述
- 数据解压缩,使用了
zlib
库中的inflate
函数对输入的数据进行解压缩,并将解压缩后的数据作为Lua字符串返回
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
data | string | 待解压缩数据 | 必选 |
返回
- str, 解压缩后返回的Lua字符串
异常
- 输入数据长度过长(大于UINT_MAX)时会抛异常,报错提示为
"The input param data is too large, len = %d"
inflateInit2
方法调用失败时会抛异常,报错提示为"inflateInit2 failed, ret:%d"
示例
lua
local utils_core = require 'utils.core'
local ok, str = pcall(utils_core.inflate, data)
utils_core.g_regex_match
描述
- 正则表达式匹配
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
regex | string | 正则表达式 | 必选 |
str | string | 待匹配字符串 | 必选 |
返回
- 返回匹配结果,类型为boolean
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local matched = utils_core.g_regex_match(regex, str)
utils_core.str_hash
描述
- 计算字符串的哈希值
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
str | string | 字符串 | 必选 |
返回
- integer类型,哈希值
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local value = utils_core.str_hash(str)
utils_core.signal_exit
描述
- 处理指定信号的退出操作
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
signum | number | 信号 | 必选 |
返回
- 处理结果,类型为boolean
异常
- 无
示例
lua
local utils_core = require 'utils.core'
utils_core.signal_exit(signum)
utils_core.mallopt
描述
- 设置内存分配参数
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
param | integer | 内存配置选项 | 必选 |
value | integer | 配置值 | 必选 |
返回
- 无
异常
- 无
示例
lua
local utils_core = require 'utils.core'
-- 内存持续增长的glibc内存管理配置项设置
-- M_ARENA_MAX: 最大ARENA数量,可以理解为进程拥有的堆内存池最大数量
utils_core.mallopt(ARENA,1)
-- M_TRIM_THRESHOLD:自动回收堆顶空闲内存空间给内核的阈值,单元:byte
utils_core.mallopt(M_TRIM_THRESHOLD, 4 * 1024)
utils_core.malloc_trim
描述
- 释放内存碎片
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
opt | integer | 指定堆顶保留的未释放内存字节数 | 必选 |
返回
- 无
异常
- 无
示例
lua
local utils_core = require 'utils.core'
utils_core.malloc_trim(0)
utils_core.tzset
描述
- 设置时区信息,调用C标准库的
tzset()
方法
参数
- 无
返回
- 无
异常
- 无
示例
lua
local utils_core = require 'utils.core'
utils_core.tzset()
utils_core.get_uid_gid_by_name
描述
- 根据用户名获取uid、gid
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
name | string | linux用户名 | 必选 |
返回
- uid和gid,类型均为integer
异常
- 获取失败时抛异常,报错提示为
“get_uid_gid_by_name failed! ret code: %d!"
示例
lua
local utils_core = require 'utils.core'
local ok, uid, gid = pcall(utils_core.get_uid_gid_by_name, '<su>')
assert(ok == true and uid == 0 and gid == 0)
ok = pcall(utils_core.get_uid_gid_by_name, 'root')
assert(ok == false)
utils_core.get_bmc_uptime
描述
- 获取BMC系统的启动时间,不包括boot阶段时间信息
参数
- 无
返回
- BMC系统的启动时间,类型为integer
异常
- 获取失败时抛异常,报错提示为“call sysinfo failed"
示例
lua
local utils_core = require 'utils.core'
local ok, uptime = pcall(utils_core.get_bmc_uptime)
utils_core.fork
描述
- 创建子进程
参数
- 无
返回
- 子进程的进程ID,类型为integer
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local pid = utils_core.fork()
utils_core.utf8_validate
描述
- 验证一个字符串是否为有效的UTF-8编码
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
str | string | 待验证字符串 | 必选 |
返回
- 验证结果,类型为boolean
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local is_utf8 = utils_core.utf8_validate(str)
utils_core.utf8_make_valid
描述
- 将一个字符串转换为有效的UTF-8编码
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
str | string | 待转换字符串 | 必选 |
返回
- 转换后的字符串
异常
- 使用GLib的
g_utf8_make_valid
函数修复无效的UTF-8字符后,将生成合法字符串g_valid_str
。使用安全函数strcpy_s
将g_valid_str
复制到栈缓冲区时,若缓冲区溢出,将抛异常,报错为"strcpy_s fail, ret = %d"
示例
lua
local utils_core = require 'utils.core'
local ok, valid_str = pcall(utils_core.utf8_make_valid, str)
utils_core.strtoull
描述
- 将字符串转换为无符号长长整型
(unsigned long long int)
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
ori_str | string | 待转换字符串 | 必选 |
base | integer | 转换基数(例如10表示十进制,16表示十六进制) | 必选 |
返回
- 转换后的整数,类型为integer
异常
- 若字符串不是有效的数字字符串,将抛异常,报错提示为
"invalid numerical string"
- 若字符串转换后的数超出范围,将抛异常,报错提示为
"value out of range"
示例
lua
local utils_core = require 'utils.core'
local str = '29999999999999999999999999999999999999'
local ok, num = pcall(utils_core.strtoull, str, 10)
lu.assertEquals(ok, false)
lu.assertEquals(num, 'value out of range')
str = 'yesssssss'
ok, num = pcall(utils_core.strtoull, str, 10)
lu.assertEquals(ok, false)
lu.assertEquals(num, 'invalid numerical string')
str = '18446744073709551615'
ok, num = pcall(utils_core.strtoull, str, 10)
lu.assertEquals(ok, true)
lu.assertEquals(num, -1)
str = '250068492'
ok, num = pcall(utils_core.strtoull, str, 10)
lu.assertEquals(ok, true)
lu.assertEquals(num, 250068492)
str = '0xF'
ok, num = pcall(utils_core.strtoull, str, 16)
lu.assertEquals(ok, true)
lu.assertEquals(num, 15)
utils_core.strtoll
描述
- 将字符串转换为有符号长长整型
(long long int)
参数
参数 | 类型 | 描述 | 是否必选 |
---|---|---|---|
ori_str | string | 待转换字符串 | 必选 |
base | integer | 转换基数(例如10表示十进制,16表示十六进制) | 必选 |
返回
- 转换后的整数,类型为integer
异常
- 若字符串不是有效的数字字符串,将抛异常,报错提示为
"invalid numerical string"
- 若字符串转换后的数超出范围,将抛异常,报错提示为
"value out of range"
示例
lua
local utils_core = require 'utils.core'
local str = '29999999999999999999999999999999999999'
local ok, num = pcall(utils_core.strtoll, str, 10)
lu.assertEquals(ok, false)
lu.assertEquals(num, 'value out of range')
str = 'yesssssss'
ok, num = pcall(utils_core.strtoll, str, 10)
lu.assertEquals(ok, false)
lu.assertEquals(num, 'invalid numerical string')
str = '-10001'
ok, num = pcall(utils_core.strtoll, str, 10)
lu.assertEquals(ok, true)
lu.assertEquals(num, -10001)
str = '0xF'
ok, num = pcall(utils_core.strtoll, str, 16)
lu.assertEquals(ok, true)
lu.assertEquals(num, 15)
utils_core.build_type_is_release
描述
- 判断是否为release版本
参数
- 无
返回
- 返回:判断结果,类型为boolean
异常
- 无
示例
lua
local utils_core = require 'utils.core'
local is_release_pkg = utils_core.build_type_is_release()