任务
定时器任务
数据结构定义
typedef struct TTaskTimer_s TTaskTimer; //定时器任务
typedef Tint TTimeout; //超时,单位毫秒
回调函数类型定义
定时器任务的执行函数回调
typedef void (*TTaskTimer_Func)(TTaskTimer *ptimer, TTimeout timeout, void *arg);
功能:定时器回调处理函数
参数:
参数 | 说明 |
---|---|
ptimer | 定时器对象 |
timeout | 自动触发的时间间隔 |
arg | 任务创建时传递的用户参数 |
返回值:无
定时器操作接口
获取运行时长
TTimeout TTaskGetTimeout(void);
功能:获取系统当前运行的时长
参数:无
返回值:系统当前运行时长,单位毫秒
延时函数
void TTaskDelay(TTimeout msecs);
功能:暂停程序执行一段时间
参数:
参数 | 说明 |
---|---|
msecs | 暂停时长 |
返回值:无
创建定时器
TTaskTimer * TTaskAddTimer(TTimeout period, TTaskTimer_Func callback, void *arg);
功能:创建一个定时器任务,被创建后的状态是无效状态
参数:
参数 | 说明 |
---|---|
period | 定时器循环间隔时间,单位毫秒 |
callback | 任务的回调函数 |
arg | 传递到回调函数中 |
返回值:定时器任务对象
示例:
/*创建一个定时器任务*/
void timer_callback(TTaskTimer *ptimer, TTimeout timeout, void *arg)
{
/*函数执行语句*/
}
/*---------------*/
TTaskTimer *timer = TTaskAddTimer(5000, timer_callback, NULL);
改变状态
void TTaskEnableTimer(TTaskTimer *timer, Tbool if_enable);
功能: 改变定时器任务的执行状态
参数:
参数 | 说明 |
---|---|
timer | 定时器对象 |
if_enable | 为TRUE定时器生效,为FALSE定时器失效 |
返回值:无
示例:
/*启动定时器*/
TTaskEnableTimer(timer, TRUE);
重置任务
void TTaskResetTimer(TTaskTimer *timer);
功能:使定时器重新记时
参数:
参数 | 说明 |
---|---|
timer | 定时器对象 |
返回值:无
示例:
TTaskResetTimer(timer);
间隔时间
void TTaskChangeTimeout(TTaskTimer *timer, TTimeout period);
功能:修改定时器对象的循环间隔时间
参数:
参数 | 说明 |
---|---|
timer | 定时器对象 |
period | 定时器的间隔时间 |
返回值:无
示例:
TTaskChangeTimeout(timer, 10000);
销毁定时器
void TTaskDestroyTimer(TTaskTimer *timer);
功能:销毁一个定时器任务
参数:
参数 | 说明 |
---|---|
timer | 定时器对象 |
返回值:无
示例:
TTaskDestroyTimer(timer);
文件描述符任务
数据结构定义
typedef struct TTaskFile_s TTaskFile; //文件描述符任务
回调函数类型定义
文件描述符任务的执行函数回调
typedef void (*TTaskFile_Func)(TTaskFile *pfd, Tint fd, Tint type, void *arg);
功能:文件描述符回调处理函数
参数:
参数 | 说明 |
---|---|
pfd | 文件描述符任务 |
fd | 要监视的文件句柄 |
type | 要监视的事件类型 |
arg | 任务创建时传递的用户参数 |
返回值:无
文件描述符任务操作接口
创建任务
TTaskFile *TTaskAddFile(Tint fd, TTaskFile_Func callback, Tint type, void *arg);
功能:创建一个文件描述符对象
参数:
参数 | 说明 |
---|---|
fd | 要监视的文件句柄 |
callback | 任务的回调函数 |
type | 实际发生的事件类型 |
arg | 传递到回调函数中 |
返回值:文件描述符对象
示例:
/*创建一个文件描述符任务*/
void file_callback(TTaskFile *pfd, Tint fd, Tint type, void *arg)
{
/*函数执行语句*/
}
/*------------------*/
pipe(fd);
TTaskFile *file = TTaskAddFile(fd, file_callback, T_IO_READ, NULL);
查询任务
TTaskFile *TTaskFindFile(Tint fd, TTaskFile_Func callback, void *arg);
功能:查询文件描述符任务是否存在
参数:
参数 | 说明 |
---|---|
fd | 文件句柄 |
callback | 任务的回调函数 |
arg | 传递到回调函数中 |
返回值:存在返回文件描述符对象,否则返回NULL
切换类型
void TTaskChangeFileType(TTaskFile *file, Tint type);
功能:修改文件描述符对象监视的事件类型
参数:
参数 | 说明 |
---|---|
file | 文件描述符对象 |
type | 要监视的事件类型 |
返回值:无
示例:
/*切换文件描述符对象监视写入数据*/
TTaskChangeFileType(file, T_IO_WRITE);
销毁任务
void TTaskDestroyFile(TTaskFile *pfd);
功能:销毁文件描述符对象
参数:
参数 | 说明 |
---|---|
pfd | 文件描述符对象 |
返回值:无
读管道
Tint TPipeRead(Tint fd, Tuint8 *b, Tint n);
功能:从管道fd中读取n个字节到b
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
b | 读到的字节存储地址 |
n | 读取字节个数 |
返回值:成功返回0,失败返回-1,未读满n个字符认定为失败
写管道
Tint TPipeWrite(Tint fd, const Tuint8 *b, Tint n);
功能:向管道fd中写入b中的n个字节
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
b | 写入字符的地址 |
n | 字节个数 |
返回值:成功返回0,失败返回-1
取消读管道
Tint TPipeReadDiscard(Tint fd, Tint n);
功能:取消从管道fd中读取n个字节
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
n | 字节个数 |
返回值:成功返回0,失败返回-1
延时读管道
Tint TPipeReadTimeout(Tint fd, Tuint8 *b, Tint n, TTimeout t);
功能:从管道fd中读取n个字节到b,最长等待时间t
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
b | 读到的字节存储地址 |
n | 读取字节个数 |
t | 超时timeout 单位毫秒 |
返回值:成功返回0,失败返回-1
检查文件的事件
Tint TFileCheck(Tint fd, Tint type);
功能:检查fd的是否监听type事件类型
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
type | 事件类型 |
返回值:存在返回1, 不存在返回0, 出错返回-1
延时检查事件
Tint TFileCheckTimeout(Tint fd, Tint type, TTimeout t);
功能:检查fd的是否监听type事件类型,最长延时t
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
type | 事件类型 |
t | 超时timeout 单位ms,t<0表示永远阻塞 |
返回值:存在返回1, 不存在返回0, 出错返回-1
读文件
Tint TFileRead(Tint fd, Tuint8 *b, Tint n);
功能:从文件fd中读取n个字节到b
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
b | 读到的字节存储地址 |
n | 读取字节个数 |
返回值:成功返回0,失败返回-1
写文件
Tint TFileWrite(Tint fd, const Tuint8 *b, Tint n);
功能:向文件fd中写入b中的n个字节
参数:
参数 | 说明 |
---|---|
fd | 传入句柄 |
b | 读到的字节存储地址 |
n | 读取字节个数 |
返回值:成功返回0,失败返回-1
打开网络套接字
Tint TOpenSocket(Tint family, Tint type, const char *addr, Tint port);
功能:打开一个网络套接字
参数:
参数 | 说明 |
---|---|
family | IP 地址类型 |
type | 数据传输方式 |
addr | ip地址 |
port | 端口号 |
返回值:返回句柄
连接网络套接字
Tint TConnectSocket(Tint family, Tint type, const char *peeraddr, Tint port);
功能:连接一个网络套接字
参数:
参数 | 说明 |
---|---|
family | IP 地址类型 |
type | 数据传输方式 |
peeraddr | 连接对方的ip地址 |
port | 端口号 |
返回值:成功则返回0,失败返回非0
简单任务
数据结构定义
typedef struct TTaskOnce_s TTaskOnce; //简单任务
回调函数类型定义
简单任务的执行回调函数
typedef void (*TTaskOnce_Func)(TTaskOnce *ponce, Tint n, void *arg);
功能:简单任务回调处理函数
参数:
参数 | 说明 |
---|---|
ponce | 任务对象 |
n | 触发任务时传递的用户参数 |
arg | 任务创建时传递的用户参数 |
返回值:无
TTaskSignal的回调函数
typedef void (*TTaskSignal_Func)(int sig);
功能:信号的回调处理函数
参数:
参数 | 说明 |
---|---|
sig | 传入信号编号 |
返回值:无
shell语句回调处理函数
typedef void (*TProcessOutput_Func)(Tint result, const char *output, Tint len, void *arg);
功能:shell语句回调处理函数 result 取值包括:
- WIFEXITED(result):正常退出
- WEXITSTATUS(result):退出代码
- WIFSIGNALED(result):信号退出
- WTERMSIG(result):退出信号
- WIFCONTINUED(result):没有结束,继续运行(result == __W_CONTINUED)
参数:
参数 | 说明 |
---|---|
result | process 结束的原因 |
output | process 输出的内容 |
len | output的长度 |
arg | 执行函数传递的参数 |
返回值:无
Shell 命令执行类型定义
#define NEED_WAIT 0x80 //以后会调用TProcessWait() 同步
#define NO_KILL_GROUP 0x40 //进程退出时,是否自动杀掉进程组
#define OUTPUT_MODE_NO 0x00 //用户只想处理命令结束
简单任务操作接口
获取状态
Tint TTaskGetStatus(void *pfd_timer_once);
功能:获取任务对象的状态
参数:
参数 | 说明 |
---|---|
pfd_timer_once | 任务对象 |
返回值:0:闲置,1:预备,2:执行,3:摧毁,4:失效
创建任务
TTaskOnce * TTaskAddOnce(TTaskOnce_Func callback, void *arg);
功能:创建一个简单任务,创建后需要主动触发
参数:
参数 | 说明 |
---|---|
callback | 任务的回调函数 |
arg | 传递到回调函数中 |
返回值:简单任务对象
示例:
/*创建一个简单任务*/
void TTaskAddOnce(TTaskOnce *ponce, Tint n, void *arg)
{
/*函数执行语句*/
}
/*---------------*/
TTaskOnce *once = TTaskAddOnce(once_callback, NULL);
触发任务
void TTaskTriggerOnce(TTaskOnce *once, Tint n);
功能:触发简单任务,不会立刻执行,等待程序进入loop后执行
参数:
参数 | 说明 |
---|---|
once | 任务对象 |
n | 传给执行函数的参数 n |
返回值:无
示例:
TTaskTriggerOnce(once, 1);
延时唤醒任务
void TTaskAwakeTimeout(TTimeout timeout);
功能:在timeout时间之后唤醒所有任务线程
参数:
参数 | 说明 |
---|---|
timeout | 最长等待时间 |
返回值:无
创建信号任务
void TTaskSignal(int sig, TTaskSignal_Func handler);
功能:和系统函数signal() 相同, 但是: 1.没有返回值; 2.保证handler 不会重入; 3.handler 和普通的回调函数一样, 没有调用函数的限制; 4.如果handler==NULL, 那么该函数内部会调用signal(sig, SIG_IGN) 5.如果handler==-1, 那么该函数内部会调用signal(sig, SIG_DFL)
参数:
参数 | 说明 |
---|---|
sig | 指定的信号编号 |
handler | 指定程序可以处理信号的三种方式之一 |
返回值:无
执行Shell命令
T_ID TProcessShellExec(const char *cmd, Tuint32 flags, TProcessOutput_Func output_func, void *func_arg);
功能:执行Shell命令
- 如果 output_func 为 NULL 表示用户不关心该命令的输出,也没有结束处理函数。
- 注意同时能够运行的 shell 子进程个数做了限制,目前是256
- 命令字符串目前最长2048 个字节
- 参数目前最多128 个
参数:
参数 | 说明 |
---|---|
cmd | 要执行的命令 |
flags | 取值范围参考 Shell 命令执行类型定义 |
output_func | 表示命令 cmd 的输出处理函数和结束处理函数 |
func_arg | 传递到回调函数中 |
返回值:Process ID
示例
/*执行shell语句*/
void output_func(Tint result, const char *output, Tint len, void *arg)
{
/*函数执行语句*/
}
TProcessShellExec("echo BlueStar", NEED_WAIT, output_func, NULL);
等待Shell命令执行
Tbool TProcessWait(T_ID id, TTimeout timeout, Tbool if_kill, Tint *result);
功能:超时等待执行Shell命令完毕
参数:
参数 | 说明 |
---|---|
id | 函数 TProcessShellExec 返回的 Process ID |
timeout | 以毫秒为单位,<0 表示永远等待,=0 表示不等待 |
if_kill | 表示如果没有执行完是否强制 kill (该函数仍然返回FALSE) |
result | 在该函数返回 TRUE 的情况下参数 result 返回 Shell 命令的执行结果 |
返回值:执行完毕返回TRUE,否则返回FALES,如果执行时没有 NEED_WAIT,可能该进程已经退出了,这时也返回 FALSE
程序路径获取
程序路径操作接口
获取当前程序文件在文件系统中的绝对路径
const char *TGetExecutePath(const char *suffix);
功能:获取当前程序文件在文件系统中的绝对路径
参数:
参数 | 说明 |
---|---|
suffix | 文件路径,可以是绝对路径/相对路径或NULL |
返回值:一个绝对路径
- 当 suffix 为 NULL 时,返回当前程序文件在文件系统中的目录的绝对路径
- 当 suffix 为绝对路径时,就返回 suffix 的内容
- 当 suffix 为相对路径时,返回相对于当前程序文件在文件系统中的目录的绝对路径
示例
/*当前执行程序路径:/home/name/example/bin/*/
TGetExecutePath(NULL);/*返回/home/name/example/bin/*/
TGetExecutePath("/home/name/example/src");/*返回/home/name/example/src*/
TGetExecutePath("../src");/*返回/home/name/example/bin/../src*/
获取程序可读写目录的绝对路径
const char *TGetExecuteVarPath(const char * suffix);
功能:获取程序可读写目录的绝对路径
参数:
参数 | 说明 |
---|---|
suffix | NULL |
返回值:程序可读写目录的绝对路径
获取调用该函数的函数所在文件的绝对路径
const char *TGetFunctionPath(const char *suffix);
功能:获取调用该函数的函数所在文件的绝对路径,如用于获取动态链接库所在的路径,用法和 TGetExecutePath 相同
参数:
参数 | 说明 |
---|---|
suffix | NULL |
返回值:调用该函数的函数所在文件的绝对路径
日志输出控制
数据结构定义
enum TLogLevelEnum
打印等级
成员
TLOG_NONE =0,
TLOG_FATAL =0x10, //重大错误信息
TLOG_ERROR =0x20, //一般错误信息
TLOG_WARNING =0x30, //警告信息
TLOG_INFO =0x40, //一般信息
TLOG_DEBUG =0x50, //调试信息
日志操作接口
设置输出级别
void TLogSetLevel(TLogLevelEnum level);
功能:主动设置输出级别,不从TLOG环境变量获取
参数:
参数 | 说明 |
---|---|
level | 输出日志等级 |
返回值:无