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错误,错误信息包含了具体的错误描述和错误码。

参数

参数类型描述是否必选
dirstring切换到的工作目录必选

返回

异常

  • 若切换失败,将抛异常

示例

lua
local utils_core = require 'utils.core'
local ok = pcall(utils_core.chdir, dir)

utils_core.stat

描述

  • 获取指定文件的状态信息(如文件类型、权限、大小、修改时间等),并将这些信息以Lua table的形式返回给调用者。

参数

参数类型描述是否必选
file_namestring待获取信息的文件必选

返回

异常

  • 若获取文件状态信息失败,将抛异常,报错提示为"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_namestring待获取信息的文件必选

返回

异常

  • 若获取文件状态信息失败,将抛异常,报错提示为"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_namestring待获取信息的文件必选

返回

异常

  • 若获取文件状态信息失败,将抛异常,报错提示为"get file statfs failed"

示例

lua
local utils_core = require 'utils.core'
local ok, file_statfs = pcall(utils_core.statfs, file_name)

utils_core.setenv

描述

  • 设置环境变量

参数

参数类型描述是否必选
namestring环境变量的名称必选
valuestring环境变量待设置值必选
overwriteboolean是否覆盖已存在的环境变量必选

返回

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

异常

示例

lua
local utils_core = require 'utils.core'
utils_core.setenv(name, value, overwrite)

utils_core.getenv

描述

  • 获取操作系统环境变量的值

参数

参数类型描述是否必选
namestring环境变量的名称必选

返回

  • 操作系统环境变量的值,类型为string

异常

示例

lua
local utils_core = require 'utils.core'
local env = utils_core.getenv(name)

utils_core.setgid

描述

  • 设置进程的有效组ID(Effective Group ID)

参数

参数类型描述是否必选
idinteger待设置的进程有效组ID值必选

返回

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

异常

示例

lua
local utils_core = require 'utils.core'
utils_core.setgid(id)

utils_core.setuid

描述

  • 设置用户ID(User ID)

参数

参数类型描述是否必选
idinteger待设置的用户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

描述

  • 判断指定路径是否为目录

参数

参数类型描述是否必选
pathstring路径必选

返回

  • 判断结果,类型为boolean

异常

示例

lua
local utils_core = require 'utils.core'
lu.assertEquals(utils_core.is_dir(path), true)

utils_core.is_file

描述

  • 判断指定路径是否为文件

参数

参数类型描述是否必选
pathstring路径必选

返回

  • 判断结果,类型为boolean

异常

示例

lua
local utils_core = require 'utils.core'
lu.assertEquals(utils_core.is_file(path), true)

utils_core.dir

描述

  • 打开指定路径的目录

参数

参数类型描述是否必选
pathstring路径必选

返回

  • 文件列表,类型为table

异常

  • 若打开目录失败,将抛异常

示例

lua
local utils_core = require 'utils.core'
local is, file_list = pcall(utils_core.dir, path)

utils_core.file_set_contents

描述

  • 将字符串内容写入文件

参数

参数类型描述是否必选
pathstring文件路径必选
datastring待写入字符串必选

返回

  • 文件列表,类型为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字符串返回

参数

参数类型描述是否必选
datastring待解压缩数据必选

返回

  • 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

描述

  • 正则表达式匹配

参数

参数类型描述是否必选
regexstring正则表达式必选
strstring待匹配字符串必选

返回

  • 返回匹配结果,类型为boolean

异常

示例

lua
local utils_core = require 'utils.core'
local matched = utils_core.g_regex_match(regex, str)

utils_core.str_hash

描述

  • 计算字符串的哈希值

参数

参数类型描述是否必选
strstring字符串必选

返回

  • integer类型,哈希值

异常

示例

lua
local utils_core = require 'utils.core'
local value = utils_core.str_hash(str)

utils_core.signal_exit

描述

  • 处理指定信号的退出操作

参数

参数类型描述是否必选
signumnumber信号必选

返回

  • 处理结果,类型为boolean

异常

示例

lua
local utils_core = require 'utils.core'
utils_core.signal_exit(signum)

utils_core.mallopt

描述

  • 设置内存分配参数

参数

参数类型描述是否必选
paraminteger内存配置选项必选
valueinteger配置值必选

返回

异常

示例

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

描述

  • 释放内存碎片

参数

参数类型描述是否必选
optinteger指定堆顶保留的未释放内存字节数必选

返回

异常

示例

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

参数

参数类型描述是否必选
namestringlinux用户名必选

返回

  • 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编码

参数

参数类型描述是否必选
strstring待验证字符串必选

返回

  • 验证结果,类型为boolean

异常

示例

lua
local utils_core = require 'utils.core'
local is_utf8 = utils_core.utf8_validate(str)

utils_core.utf8_make_valid

描述

  • 将一个字符串转换为有效的UTF-8编码

参数

参数类型描述是否必选
strstring待转换字符串必选

返回

  • 转换后的字符串

异常

  • 使用GLib的g_utf8_make_valid函数修复无效的UTF-8字符后,将生成合法字符串g_valid_str。使用安全函数strcpy_sg_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_strstring待转换字符串必选
baseinteger转换基数(例如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_strstring待转换字符串必选
baseinteger转换基数(例如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()