libfunc — 基础工具函数 API 参考
模块概述
libfunc 提供嵌入式开发中最常用的 65 个基础工具函数,分为 7 大类:
- 校验计算
- 字符串转换
- 时间处理
- 文件目录操作
- 进程管理
- 环境变量路径
- IPC 消息队列
一、校验计算 (6 函数)
| 函数 |
说明 |
func_cal_sum_byte(d, n) |
8 位累加校验和 |
func_cal_sum_word(d, n) |
16 位累加校验和 |
func_cal_crc16(d, n) |
CRC16 (Modbus 多项式 0xA001) |
func_cal_crc32(d, n) |
CRC32 (标准多项式) |
func_cal_file_crc16(path) |
文件 CRC16(4K 缓冲区流式计算) |
func_cal_file_crc32(path) |
文件 CRC32 |
示例:
uint8_t d[] = { 0x01, 0x02, 0x03 };
uint16_t crc = func_cal_crc16(d, 3);
printf("CRC16 = 0x%04X\n", crc); // 0x6161
二、字符串转换 (10 函数)
| 函数 |
参数 |
说明 |
func_hex_ch(c) |
char c |
十六进制字符 → 数值 |
func_dec_ch(c) |
char c |
十进制字符 → 数值 |
func_hex2dec(s) |
char *s |
"FF" → 255 |
func_dec2dec(s) |
char *s |
"255" → 255(支持负号) |
func_hex2buf(s, dst, len) |
3 参数 |
十六进制字符串 → 字节缓冲 |
func_dec2str(buf, sz, val, w) |
4 参数 |
int → 十进制字符串 |
func_hex2str(buf, sz, val, w) |
4 参数 |
int → 十六进制字符串 |
func_float2str(buf, sz, f, w) |
4 参数 |
float → 字符串 |
func_buf2str(buf, sz, src, n) |
4 参数 |
字节数组 → 十六进制字符串 |
func_str2argv(s, argc, argv, max) |
4 参数 |
按空格分割为 argc/argv |
示例:
char buf[64];
func_dec2str(buf, sizeof(buf), 255, 4);
printf("%s\n", buf); // "0255"
func_hex2str(buf, sizeof(buf), 255, 0);
printf("%s\n", buf); // "FF"
三、时间处理 (6 函数)
| 函数 |
说明 |
func_time_sys2str(buf, sz, ts) |
系统时间 → "YYYY-MM-DD HH:MM:SS.mmm" |
func_str2time_sys(s, ts) |
字符串 → 系统时间 |
func_get_time(t, type) |
获取当前时间(type: 1=sys, 2=cal) |
func_set_time(t, type) |
设置系统时间(需 root) |
func_time_sys2cal(src, dst) |
系统时间 → 日历时间 |
func_time_cal2sys(src, dst) |
日历时间 → 系统时间 |
四、文件目录操作 (11 函数)
| 函数 |
说明 |
func_dir_exist(p) |
目录是否存在 |
func_make_dirs(p) |
递归创建目录 |
func_del_dirs(p) |
递归删除目录 |
func_del_dirs_cmd(p) |
系统命令删除(rm -rf) |
func_file_exist(p) |
文件是否存在 |
func_file_size(p) |
获取文件大小(字节) |
func_read_file(p, buf, cap, out) |
读文件到预分配缓冲 |
func_read_file_alloc(p, out) |
读文件到动态分配缓冲 |
func_write_file(p, buf, n) |
写缓冲到文件 |
func_read_file_info(p, info, check) |
读结构化文件头(256B, CRC 校验) |
示例:
// 创建目录
func_make_dirs("/tmp/myapp/config");
// 读取文件
uint32_t size = 0;
uint8_t *buf = func_read_file_alloc("/tmp/test.txt", &size);
if (buf)
{
printf("Read %u bytes: %s\n", size, buf);
free(buf);
}
五、进程管理 (9 函数)
| 函数 |
说明 |
func_proc_self_name(buf, sz) |
获取本进程名(读 /proc/self/comm) |
func_proc_name_by_pid(pid, buf, sz) |
PID → 进程名 |
func_proc_pid() |
获取本进程 PID |
func_proc_pid_by_name(name) |
进程名 → PID |
func_proc_exist_by_pid(pid) |
按 PID 判断进程存在 |
func_proc_exist_by_name(name) |
按名称判断进程存在 |
func_proc_path_by_pid(pid, buf, sz) |
PID → 可执行文件路径 |
func_proc_self_path(buf, sz) |
本进程路径 |
func_proc_self_dir(buf, sz) |
本进程目录 |
六、环境变量路径 (12 函数)
| 函数 |
环境变量 |
func_get_work_path(..) |
WORK_PATH |
func_get_syscfg_path(..) |
SYS_CFG_PATH |
func_get_app_root(..) |
APP_ROOT_PATH |
func_get_his_root(..) |
HIS_ROOT_PATH |
func_get_log_root(..) |
LOG_ROOT_PATH |
func_get_dbc_root(..) |
DBC_ROOT_PATH |
func_get_shell_path(..) |
SHELL_PATH |
func_get_update_path(..) |
UPDATE_PATH |
func_get_app_path(app, ..) |
拼接: APP_ROOT/app |
func_get_app_cfg(app, ext, ..) |
拼接: APP_ROOT/app/ext |
func_get_app_his(app, ..) |
拼接: HIS_ROOT/app |
func_get_app_log(app, ..) |
拼接: LOG_ROOT/app |
示例:
char path[256];
func_get_app_cfg("RTU", "config.json", path, sizeof(path));
printf("Config path: %s\n", path); // /opt/RTU/config.json
七、IPC 消息队列 (9 函数)
| 函数 |
说明 |
func_ipc_create_by_name(name, qid) |
按名称创建 System V 消息队列 |
func_ipc_create_by_pid(pid, qid) |
按 PID 创建 |
func_ipc_get_by_name(name, qid) |
按名称获取 |
func_ipc_get_by_pid(pid, qid) |
按 PID 获取 |
func_ipc_send_buf(qid, tx, n) |
发送原始字节 |
func_ipc_recv_buf(qid, rx, n) |
接收原始字节 |
func_ipc_send_msg(qid, msg) |
发送结构体消息 |
func_ipc_recv_msg(qid, msg) |
接收结构体消息 |
func_ipc_delete(qid) |
删除队列 |
依赖关系
- 依赖: myBase.h
- 被依赖: liblog (进程路径), 所有需要 CRC/文件/进程操作的模块