嵌入式开发之--Linux下C语言实现小工具集合
2019-07-12 23:31发布
生成海报
直接上代码,很好用很实用哦!
#include
#include
#include
#include
#include
#include
#include /* offsetof */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
#include
#include
#include
#include
#include
#include
#include "toolbox.h"
#include "common.h"
#include "global_config.h"
/*****************************************************************************
函 数 名 : COMMON_GetStorageInfo
功能描述 : 获取容量
输入参数 : char* MountPoint
int* Capacity
int type: 1 for totol Capacity, 2 for used Capacity , 3 for free Capacity
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int COMMON_GetStorageInfo(char* MountPoint,int* Capacity,int type)
{
int ret;
struct statfs statFS;
unsigned int totalBytes;
unsigned int freeBytes;
unsigned int usedBytes;
if(MountPoint == 0 || Capacity == 0){
return -1;
}
ret = statfs(MountPoint, &statFS);
if (ret == -1){
printf("statfs failed for path->[%s]
", MountPoint);
return -1;
}
totalBytes = (unsigned int)statFS.f_blocks * (unsigned int)(statFS.f_frsize/1024);
freeBytes = (unsigned int)statFS.f_bfree * (unsigned int)(statFS.f_frsize/1024);
usedBytes = (unsigned int)(totalBytes - freeBytes);
switch( type )
{
case 1:
*Capacity = totalBytes/1024;
break;
case 2:
*Capacity = usedBytes/1024;
break;
case 3:
*Capacity = freeBytes/1024;
break;
default:
return -1;
}
return 0;
}
/*****************************************************************************
函 数 名 : StrisInt
功能描述 :
输入参数 : const char* str
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int StrisInt(const char* str)
{
int value;
char intstr[20];
value = atoi(str);
sprintf(intstr, "%d", value);
return strcmp(str, intstr);
}
/*****************************************************************************
函 数 名 : CreateProcess
功能描述 : 创建一个进程
输入参数 : const char* cmd
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int CreateProcess(const char* cmd)
{
FILE* fp;
fp = popen(cmd,"r");
pclose(fp);
return 0;
}
/*****************************************************************************
函 数 名 : is_file_exist
功能描述 : 判断文件是否存在
输入参数 : const char *file_path
输出参数 : 无
返 回 值 : int
0: 存在
-1:不存在
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int is_file_exist(const char *file_path)
{
if(file_path ==NULL)
return -1 ;
if(access(file_path,F_OK) == 0)
return 0 ;
return -1;
}
/*****************************************************************************
函 数 名 : is_dir_exist
功能描述 : 判断目录是否存在
输入参数 : const char *dir_path
输出参数 : 无
返 回 值 : int
0: 存在
-1:不存在
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int is_dir_exist(const char *dir_path)
{
if(dir_path ==NULL)
return -1 ;
if(opendir(dir_path) == NULL)
return -1 ;
return 0;
}
/*****************************************************************************
函 数 名 : getfilesize
功能描述 : 传入文件名,获取文件大小
输入参数 : FILE *pFile
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int getfilesize(FILE *pFile)
{
// check FILE*.
if( pFile == NULL){
return -1;
}
// get file size.
int fd = fileno((FILE *)pFile);
if(fd == -1){
return -1;
}
struct stat fileStat;
if( -1 == fstat(fd, &fileStat)){
return -1;
}
// deal returns.
return fileStat.st_size;
}
/*****************************************************************************
函 数 名 : GetFileSize
功能描述 : 传入文件路径,获取文件大小
输入参数 : const char* path
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int GetFileSize(const char* path)
{
int fd;
int ret = -1;
struct stat fileStat;
fd = open(path,O_RDONLY);
if(fd == -1){
return -1;
}
ret = fstat(fd, &fileStat);
if(ret == -1){
close(fd);
return -1;
}
ret = fileStat.st_size;
close(fd);
return ret;
}
#define LOG_BUF_MAX 512
/*****************************************************************************
函 数 名 : gettid
功能描述 : 获取进程号
输入参数 : void
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
pid_t gettid()
{
return syscall(SYS_gettid);
}
/*****************************************************************************
函 数 名 : ipc_pthread_create
功能描述 : 创建线程
输入参数 : pthread_t *thread_id
ipc_thread_main *func
void *arg
int stack_size
int priority)
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int ipc_pthread_create(pthread_t *thread_id, ipc_thread_main *func, void *arg, int stack_size, int priority)
{
int ret;
pthread_attr_t SchedAttr;
struct sched_param SchedParam;
#ifdef _POSIX_THREAD_PRIORITY_SCHEDULING
//ipc_print("pthread priority(SCHED_RR)=(min=%d,max=%d)
", sched_get_priority_min(SCHED_RR), sched_get_priority_max(SCHED_RR));
//ipc_print("pthread priority(SCHED_FIFO)=(min=%d,max=%d)
", sched_get_priority_min(SCHED_FIFO), sched_get_priority_max(SCHED_FIFO));
#endif
/** init sched param attribute **/
pthread_attr_init(&SchedAttr);
if(priority != -1)
{
ret = pthread_attr_setinheritsched(&SchedAttr, PTHREAD_EXPLICIT_SCHED);
if (ret != 0)
ipc_print("pthread_attr_setschedpolicy, %s
", strerror(ret));
ret = pthread_attr_setschedpolicy(&SchedAttr, SCHED_RR);
if (ret != 0)
ipc_print("pthread_attr_setschedpolicy, %s
", strerror(ret));
SchedParam.sched_priority = priority;
ret = pthread_attr_setschedparam(&SchedAttr, &SchedParam);
if (ret != 0)
ipc_print("pthread_attr_setschedparam, %s
", strerror(ret));
}
ret = pthread_attr_setstacksize(&SchedAttr, stack_size);
if (ret != 0)
ipc_print("pthread_attr_setstacksize, %s
", strerror(ret));
ret = pthread_create(thread_id, &SchedAttr, func, arg);
if(ret != 0)
ipc_print("pthread_create [ %x ] failed, %s
", (unsigned int)*func, strerror(ret));
pthread_attr_destroy(&SchedAttr);
return ret;
}
/*****************************************************************************
函 数 名 : ipc_print
功能描述 : 自定义打印
输入参数 : char * fmt, 可变参数
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
T_VOID ipc_print(char* fmt, ...)
{
T_CHR buf[LOG_BUF_MAX];
va_list ap;
memset(buf, 0, sizeof(buf));
va_start(ap, fmt);
vsnprintf(buf, LOG_BUF_MAX, fmt, ap);
if(strlen(buf) >= LOG_BUF_MAX)
{
printf("*****************buf overflow**********************
");
}
buf[LOG_BUF_MAX - 1] = 0;
va_end(ap);
syslog(LOG_DEBUG,"%s", buf);
printf("%s", buf);
}
/*****************************************************************************
函 数 名 : do_syscmd
功能描述 : 执行系统命令
输入参数 : char * cmd, 要执行的命令
char *result, 执行结果
输出参数 : 无
返 回 值 : int
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2017年7月17日
作 者 : cw
修改内容 : 增加注释
*****************************************************************************/
int do_syscmd(char *cmd, char *result)
{
char buf[4096];
FILE *filp;
filp = popen(cmd, "r");
if (NULL == filp){
ipc_print("[%s:%d] popen %s, cmd:%s!
",
__func__, __LINE__, strerror(errno), cmd);
return -2;
}
//fgets(buf, sizeof(buf)-1, filp);
memset(buf, '
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮