* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#include "osal.h"
#include "osal_linux.h"
* 描述:睡眠指定时间
* 参数: milliSecond -- 睡眠时间 单位ms, linux下usleep函数microSecond入参必须小于1000000
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalSleep(uint32_t milliSecond)
{
#ifdef OSAL
return LinuxSleep(milliSecond);
#else
return mmSleep(milliSecond);
#endif
}
* 描述:获取进程ID
* 参数:无
* 返回值:执行成功返回对应调用进程的id, 执行错误返回OSAL_EN_ERROR
*/
int32_t OsalGetPid(void)
{
#ifdef OSAL
return LinuxGetPid();
#else
return mmGetPid();
#endif
}
* 描述:获取调用线程的线程ID
* 参数:无
* 返回值:执行成功返回对应调用线程的id, 执行错误返回OSAL_EN_ERROR
*/
int32_t OsalGetTid(void)
{
#ifdef OSAL
return LinuxGetTid();
#else
return mmGetTid();
#endif
}
#ifndef LITE_OS
* 描述:创建socket
* 参数: sockFamily--协议域
* type--指定socket类型
* protocol--指定协议
* 返回值:执行成功返回创建的socket id, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
OsalSockHandle OsalSocket(int32_t sockFamily, int32_t type, int32_t protocol)
{
#ifdef OSAL
return LinuxSocket(sockFamily, type, protocol);
#else
return mmSocket(sockFamily, type, protocol);
#endif
}
* 描述:把一个地址族中的特定地址赋给socket
* 参数: sockFd--socket描述字,通过OsalSocket函数创建
* addr--一个指向要绑定给sockFd的协议地址
* addrLen--对应地址的长度
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalBind(OsalSockHandle sockFd, OsalSockAddr *addr, OsalSocklen addrLen)
{
#ifdef OSAL
return LinuxBind(sockFd, addr, addrLen);
#else
return mmBind(sockFd, addr, addrLen);
#endif
}
* 描述:监听socket
* 参数: sockFd--socket描述字,通过OsalSocket函数创建
* backLog--相应socket可以排队的最大连接个数
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalListen(OsalSockHandle sockFd, int32_t backLog)
{
#ifdef OSAL
return LinuxListen(sockFd, backLog);
#else
return mmListen(sockFd, backLog);
#endif
}
* 描述:监听指定的socket地址
* 参数: sockFd--socket描述字,通过OsalSocket函数创建
* addr--用于返回客户端的协议地址, addr若为nullptr, addrLen也应该为nullptr
* addrLen--协议地址的长度
* 返回值:执行成功返回自动生成的一个全新的socket id, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
OsalSockHandle OsalAccept(OsalSockHandle sockFd, OsalSockAddr *addr, OsalSocklen *addrLen)
{
#ifdef OSAL
return LinuxAccept(sockFd, addr, addrLen);
#else
return mmAccept(sockFd, addr, addrLen);
#endif
}
* 描述:发出socket连接请求
* 参数:sockFd--socket描述字,通过OsalSocket函数创建
* addr--服务器的socket地址
* addrLen--地址的长度
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalConnect(OsalSockHandle sockFd, OsalSockAddr *addr, OsalSocklen addrLen)
{
#ifdef OSAL
return LinuxConnect(sockFd, addr, addrLen);
#else
return mmConnect(sockFd, addr, addrLen);
#endif
}
* 描述:在建立连接的socket上发送数据
* 参数: sockFd--已建立连接的socket描述字
* pstSendBuf--需要发送的数据缓存,有用户分配
* sendLen--需要发送的数据长度
* sendFlag--发送的方式标志位,一般置0
* 返回值:执行成功返回实际发送的buf长度, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
OsalSsize OsalSocketSend(OsalSockHandle sockFd, VOID *sendBuf, int32_t sendLen, int32_t sendFlag)
{
#ifdef OSAL
return LinuxSocketSend(sockFd, sendBuf, sendLen, sendFlag);
#else
return mmSocketSend(sockFd, sendBuf, sendLen, sendFlag);
#endif
}
* 描述:在建立连接的socket上接收数据
* 参数: sockFd--已建立连接的socket描述字
* pstRecvBuf--存放接收的数据的缓存,用户分配
* recvLen--需要发送的数据长度
* recvFlag--接收的方式标志位,一般置0
* 返回值:执行成功返回实际接收的buf长度, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
OsalSsize OsalSocketRecv(OsalSockHandle sockFd, VOID *recvBuf, int32_t recvLen, int32_t recvFlag)
{
#ifdef OSAL
return LinuxSocketRecv(sockFd, recvBuf, recvLen, recvFlag);
#else
return mmSocketRecv(sockFd, recvBuf, recvLen, recvFlag);
#endif
}
#endif
* 描述:获取错误码
* 返回值:error code
*/
int32_t OsalGetErrorCode(void)
{
#ifdef OSAL
return LinuxGetErrorCode();
#else
return mmGetErrorCode();
#endif
}
* 描述:新创建进程执行可执行程序或者指定命令或者重定向输出文件
* 参数:fileName--需要执行的可执行程序所在路径名
* env--保存子进程的状态信息
* stdoutRedirectFile--重定向文件路径, 若不为空, 则启用重定向功能
* id--创建的子进程ID号
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalCreateProcess(const CHAR *fileName, const OsalArgvEnv *env, const CHAR *stdoutRedirectFile, OsalProcess *id)
{
#ifdef OSAL
return LinuxCreateProcess(fileName, env, stdoutRedirectFile, id);
#else
return mmCreateProcess(fileName, env, stdoutRedirectFile, id);
#endif
}
* 描述:创建带属性的线程, 支持调度策略、优先级、线程栈大小、分离属性设置,除了分离属性,其他只在linux下有效
* 参数: threadHandle -- pthread_t类型的实例
* funcBlock --包含函数名和参数的结构体指针
* threadAttr -- 包含需要设置的线程属性类别和值
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalCreateTaskWithThreadAttr(OsalThread *threadHandle,
const OsalUserBlock *funcBlock, const OsalThreadAttr *threadAttr)
{
#ifdef OSAL
return LinuxCreateTaskWithThreadAttr(threadHandle, funcBlock, threadAttr);
#else
return mmCreateTaskWithThreadAttr(threadHandle, funcBlock, threadAttr);
#endif
}
* 描述:等待子进程结束并返回对应结束码
* 参数:pid--欲等待的子进程ID
* status--保存子进程的状态信息
* options--options提供了一些另外的选项来控制waitpid()函数的行为
* OSAL_WAIT_NOHANG--如果pid指定的子进程没有结束,则立即返回;如果结束了, 则返回该子进程的进程号
* OSAL_WAIT_UNTRACED--如果子进程进入暂停状态,则马上返回
* 返回值:子进程未结束返回EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
* 进程已经结束返回EN_ERR
*/
int32_t OsalWaitPid(OsalProcess pid, int32_t *status, int32_t options)
{
#ifdef OSAL
return LinuxWaitPid(pid, status, options);
#else
return mmWaitPid(pid, status, options);
#endif
}
* 描述:该函数等待线程结束并返回线程退出值"value_ptr"
* 如果线程成功结束会detach线程
* 注意:detached的线程不能用该函数或取消
* 参数: threadHandle-- pthread_t类型的实例
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalJoinTask(OsalThread *threadHandle)
{
#ifdef OSAL
return LinuxJoinTask(threadHandle);
#else
return mmJoinTask(threadHandle);
#endif
}
* 描述:获取系统开机到现在经过的时间
* 返回值:执行成功返回类型OsalTimespec结构的时间
*/
OsalTimespec OsalGetTickCount(void)
{
#ifdef OSAL
return LinuxGetTickCount();
#else
return mmGetTickCount();
#endif
}
#ifndef LITE_OS
* 描述:获取当前指定路径下文件大小
* 参数:fileName--文件路径名
* length--获取到的文件大小
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalGetFileSize(const CHAR *fileName, uint64_t *length)
{
#ifdef OSAL
return LinuxGetFileSize(fileName, length);
#else
return mmGetFileSize(fileName, (ULONGLONG*)(length));
#endif
}
* 描述:获取当前指定路径下磁盘容量及可用空间
* 参数:path--路径名
* diskSize--OsalDiskSize结构内容
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalGetDiskFreeSpace(const CHAR *path, OsalDiskSize *diskSize)
{
#ifdef OSAL
return LinuxGetDiskFreeSpace(path, diskSize);
#else
return mmGetDiskFreeSpace(path, diskSize);
#endif
}
* 描述:判断是否是目录
* 参数: fileName -- 文件路径名
* 返回值:执行成功返回OSAL_EN_OK(是目录), 执行错误返回OSAL_EN_ERROR(不是目录), 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalIsDir(const CHAR *fileName)
{
#ifdef OSAL
return LinuxIsDir(fileName);
#else
return mmIsDir(fileName);
#endif
}
* 描述:判断文件或者目录是否存在
* 参数: pathName -- 文件路径名
* 参数: mode -- 权限
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalAccess2(const CHAR *pathName, int32_t mode)
{
#ifdef OSAL
return LinuxAccess2(pathName, mode);
#else
return mmAccess2(pathName, mode);
#endif
}
* 描述:判断文件或者目录是否存在
* 参数: pathName -- 文件路径名
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalAccess(const CHAR *pathName)
{
#ifdef OSAL
return LinuxAccess(pathName);
#else
return mmAccess(pathName);
#endif
}
* 描述:截取目录, 比如/usr/bin/test, 截取后为 /usr/bin
* 参数:path--路径,函数内部会修改path的值
* 返回值:执行成功返回指向截取到的目录部分指针,执行失败返回nullptr
*/
CHAR *OsalDirName(CHAR *path)
{
#ifdef OSAL
return LinuxDirName(path);
#else
return mmDirName(path);
#endif
}
* 描述:截取目录后面的部分, 比如/usr/bin/test, 截取后为 test
* 参数:path--路径,函数内部会修改path的值(行尾有\\会去掉)
* 返回值:执行成功返回指向截取到的目录部分指针,执行失败返回nullptr
*/
CHAR *OsalBaseName(CHAR *path)
{
#ifdef OSAL
return LinuxBaseName(path);
#else
return mmBaseName(path);
#endif
}
* 描述:获取当前工作目录路径
* 参数:buffer--由用户分配用来存放工作目录路径的缓存
* maxLen--缓存长度
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalGetCwd(CHAR *buffer, int32_t maxLen)
{
#ifdef OSAL
return LinuxGetCwd(buffer, maxLen);
#else
return mmGetCwd(buffer, maxLen);
#endif
}
* 描述:创建一个目录
* 参数: pathName -- 需要创建的目录路径名, 比如 CHAR dirName[256]="/home/test";
* mode -- 新目录的权限
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalMkdir(const CHAR *pathName, OsalMode mode)
{
#ifdef OSAL
return LinuxMkdir(pathName, mode);
#else
return mmMkdir(pathName, mode);
#endif
}
* 描述:修改文件读写权限,目前仅支持读写权限修改
* 参数:filename--文件路径
* mode--需要修改的权限
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalChmod(const CHAR *filename, int32_t mode)
{
#ifdef OSAL
return LinuxChmod(filename, mode);
#else
return mmChmod(filename, mode);
#endif
}
* 描述:改变当前工作目录
* 参数:path--需要切换到的工作目录
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalChdir(const CHAR *path)
{
#ifdef OSAL
return LinuxChdir(path);
#else
return mmChdir(path);
#endif
}
* 描述:扫描目录
* 参数:path--目录路径
* filterFunc--用户指定的过滤回调函数
* sort--用户指定的排序回调函数
* entryList--扫描到的目录结构指针, 用户不需要分配缓存, 内部分配, 需要调用OsalScandirFree释放
* 返回值:执行成功返回扫描到的子目录数量, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalScandir(const CHAR *path, OsalDirent ***entryList, OsalFilter filterFunc, OsalSort sort)
{
#ifdef OSAL
return LinuxScandir(path, entryList, filterFunc, sort);
#else
return mmScandir(path, entryList, filterFunc, sort);
#endif
}
* 描述:扫描目录对应的内存释放函数
* 参数:entryList--OsalScandir扫描到的目录结构指针
* count--扫描到的子目录数量
* 返回值:无
*/
VOID OsalScandirFree(OsalDirent **entryList, int32_t count)
{
#ifdef OSAL
return LinuxScandirFree(entryList, count);
#else
return mmScandirFree(entryList, count);
#endif
}
* 描述:删除目录下所有文件及目录, 包括子目录
* 参数: pathName -- 目录名全路径
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalRmdir(const CHAR *pathName)
{
#ifdef OSAL
return LinuxRmdir(pathName);
#else
return mmRmdir(pathName);
#endif
}
* 描述:删除一个文件
* 参数:filename--文件路径
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalUnlink(const CHAR *filename)
{
#ifdef OSAL
return LinuxUnlink(filename);
#else
return mmUnlink(filename);
#endif
}
* 描述:将参数path所指的相对路径转换成绝对路径
* 参数: path--原始路径相对路径
* realPath--规范化后的绝对路径, 由用户分配内存
* realPathLen--realPath缓存的长度, 长度必须要>= OSAL_MAX_PATH
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalRealPath(const CHAR *path, CHAR *realPath, int32_t realPathLen)
{
#ifdef OSAL
return LinuxRealPath(path, realPath, realPathLen);
#else
return mmRealPath(path, realPath, realPathLen);
#endif
}
* 描述:将OsalGetErrorCode函数得到的错误信息转化成字符串信息
* 参数: errnum--错误码,即OsalGetErrorCode的返回值
* buf--收错误信息描述的缓冲区指针
* size--缓冲区的大小
* 返回值:成功返回错误信息的字符串,失败返回nullptr
*/
CHAR *OsalGetErrorFormatMessage(OsalErrorMsg errnum, CHAR *buf, OsalSize size)
{
#ifdef OSAL
return LinuxGetErrorFormatMessage(errnum, buf, size);
#else
return mmGetErrorFormatMessage(errnum, buf, size);
#endif
}
* 描述:获取文件状态
* 参数: path--需要获取的文件路径名
* buffer--获取到的状态 由用户分配缓存
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalStatGet(const CHAR *path, OsalStat *buffer)
{
#ifdef OSAL
return LinuxStatGet(path, buffer);
#else
return mmStatGet(path, buffer);
#endif
}
* 描述:打开或者创建一个文件
* 参数: pathName--需要打开或者创建的文件路径名,由用户确保绝对路径
* flags--打开或者创建的文件标志位
* mode -- 打开或者创建的权限
* 返回值:执行成功返回对应打开的文件描述符, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalOpen(const CHAR *pathName, int32_t flags, OsalMode mode)
{
#ifdef OSAL
return LinuxOpen(pathName, flags, mode);
#else
return mmOpen2(pathName, flags, mode);
#endif
}
* 描述:关闭打开的文件
* 参数: fd--指向打开文件的资源描述符
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalClose(int32_t fd)
{
#ifdef OSAL
return LinuxClose(fd);
#else
return mmClose(fd);
#endif
}
* 描述:写数据到一个资源文件中
* 参数:fd--指向打开文件的资源描述符
* buf--需要写入的数据
* bufLen--需要写入的数据长度
* 返回值:执行成功返回写入的长度, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
OsalSsize OsalWrite(int32_t fd, VOID *buf, uint32_t bufLen)
{
#ifdef OSAL
return LinuxWrite(fd, buf, bufLen);
#else
return mmWrite(fd, buf, bufLen);
#endif
}
* 描述:设置当前执行的线程的线程名-线程体内调用, 仅在Linux下生效, Windows下不支持为空实现
* 参数:name--需要设置的线程名
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalSetCurrentThreadName(const CHAR* name)
{
#ifdef OSAL
return LinuxSetCurrentThreadName(name);
#else
return mmSetCurrentThreadName(name);
#endif
}
int32_t OsalGetOptInd(void)
{
#ifdef OSAL
return LinuxGetOptInd();
#else
return mmGetOptInd();
#endif
}
CHAR *OsalGetOptArg(void)
{
#ifdef OSAL
return LinuxGetOptArg();
#else
return mmGetOptArg();
#endif
}
* 描述:获取系统名字
* 参数:nameSize--存放系统名的缓存长度
* name--由用户分配缓存, 缓存长度必须>=OSAL_MIN_OS_VERSION_SIZE
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAMs
*/
int32_t OsalGetOsName(CHAR *name, int32_t nameSize)
{
#ifdef OSAL
return LinuxGetOsName(name, nameSize);
#else
return mmGetOsName(name, nameSize);
#endif
}
* 描述:加载一个动态库中的符号
* 参数:fileName--动态库文件名
* mode--打开方式
* 返回值:执行成功返回动态链接库的句柄, 执行错误返回nullptr, 入参检查错误返回nullptr
*/
VOID *OsalDlopen(const CHAR *fileName, int32_t mode)
{
#ifdef OSAL
return LinuxDlopen(fileName, mode);
#else
return mmDlopen(fileName, mode);
#endif
}
* 描述:获取OsalDlopen打开的动态库中的指定符号地址
* 参数: handle--OsalDlopen 返回的指向动态链接库指针
* funcName--要求获取的函数的名称
* 返回值:执行成功返回指向函数的地址, 执行错误返回nullptr, 入参检查错误返回nullptr
*/
VOID *OsalDlsym(VOID *handle, const CHAR *funcName)
{
#ifdef OSAL
return LinuxDlsym(handle, funcName);
#else
return mmDlsym(handle, funcName);
#endif
}
* 描述:关闭OsalDlopen加载的动态库
* 参数: handle--OsalDlopen 返回的指向动态链接库指针
* funcName--要求获取的函数的名称
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalDlclose(VOID *handle)
{
#ifdef OSAL
return LinuxDlclose(handle);
#else
return mmDlclose(handle);
#endif
}
* 描述:当OsalDlopen动态链接库操作函数执行失败时,OsalDlerror可以返回出错信息
* 返回值:执行成功返回nullptr
*/
CHAR *OsalDlerror(void)
{
#ifdef OSAL
return LinuxDlerror();
#else
return mmDlerror();
#endif
}
#endif
* 描述:分析命令行参数-长参数
* 参数:argc--传递的参数个数
* argv--传递的参数内容
* opts--用来指定可以处理哪些选项
* longOpts--指向一个OsalStructOption的数组
* longIndex--表示长选项在longopts中的位置
* 返回值:执行错误, 找不到选项元素, 返回EN_ERROR
*/
int32_t OsalGetOptLong(int32_t argc, CHAR * const * argv, const CHAR *opts, const OsalStructOption *longOpts,
int32_t *longIndex)
{
#ifdef OSAL
return LinuxGetOptLong(argc, argv, opts, longOpts, longIndex);
#else
return mmGetOptLong(argc, argv, opts, longOpts, longIndex);
#endif
}
* 描述:获取当前操作系统版本信息
* 参数:versionLength--存放操作系统信息的缓存长度
* versionInfo--由用户分配缓存, 缓存长度必须>=OSAL_MIN_OS_VERSION_SIZE
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalGetOsVersion(CHAR *versionInfo, int32_t versionLength)
{
#ifdef OSAL
return LinuxGetOsVersion(versionInfo, versionLength);
#else
return mmGetOsVersion(versionInfo, versionLength);
#endif
}
* 描述:获取当前系统cpu的部分物理硬件信息
* 参数:cpuInfo--包含需要获取信息的结构体, 函数内部分配, 需要调用LinuxCpuInfoFree释放
* count--读取到的物理cpu个数
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalGetCpuInfo(OsalCpuDesc **cpuInfo, int32_t *count)
{
#ifdef OSAL
return LinuxGetCpuInfo(cpuInfo, count);
#else
return mmGetCpuInfo(cpuInfo, count);
#endif
}
* 描述:释放OsalGetCpuInfo生成的动态内存
* 参数:cpuInfo--LinuxGetCpuInfo获取到的信息的结构体指针
* count--LinuxGetCpuInfo获取到的物理cpu个数
* 返回值:执行成功返回OSAL_EN_OK, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalCpuInfoFree(OsalCpuDesc *cpuInfo, int32_t count)
{
#ifdef OSAL
return LinuxCpuInfoFree(cpuInfo, count);
#else
return mmCpuInfoFree(cpuInfo, count);
#endif
}
* 描述:获取本地时间
* 参数: sysTimePtr -- 指向OsalSystemTime 结构的指针
* 返回值:执行成功返回OSAL_EN_OK, 执行错误返回OSAL_EN_ERROR, 入参检查错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalGetLocalTime(OsalSystemTime *sysTimePtr)
{
#ifdef OSAL
return LinuxGetLocalTime(sysTimePtr);
#else
return mmGetLocalTime(sysTimePtr);
#endif
}
* 描述:获取当前系统时间和时区信息, windows不支持时区获取
* 参数:timeVal--当前系统时间, 不能为nullptr
timeZone--当前系统设置的时区信息, 可以为nullptr, 表示不需要获取时区信息
* 返回值:执行成功返回OSAL_EN_OK, 失败返回OSAL_EN_ERROR,入参错误返回OSAL_EN_INVALID_PARAM
*/
int32_t OsalGetTimeOfDay(OsalTimeval *timeVal, OsalTimezone *timeZone)
{
#ifdef OSAL
return LinuxGetTimeOfDay(timeVal, timeZone);
#else
return mmGetTimeOfDay(timeVal, timeZone);
#endif
}