嵌入式开发之--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, '