rk3399_arm_lvds/packages/common.pkg/include/utils.h

199 lines
5.0 KiB
C
Raw Normal View History

2024-03-05 03:46:18 +00:00
/*
* @Descripttion:
* @version:
* @Author: pengming
* @Date: 2023-09-25 17:28:48
* @LastEditors: pengming
*/
#pragma once
#include <stdio.h>
#include <sstream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <syslog.h>
#include <sys/vfs.h>
#define ENLOG_SYSLOG
#define VMRSS_LINE 21
#define VMSIZE_LINE 17
#define PROCESS_ITEM 29
struct _fileSystem_info{
char fileSystem_format[8];
unsigned int fileSystem_total_capacity;
unsigned int fileSystem_free_capacity;
char fileSystem_permissions[3];
};
/*block to kbyte*/
unsigned long u_kscale(unsigned long m_block, unsigned long m_kbyte)
{
return ((unsigned long long)m_block * m_kbyte + 1024 / 2) / 1024;
}
/*convert size to GB MB KB*/
void convert_size(float m_size, int *dest)
{
if ((((m_size / 1024.0) / 1024.0)) >= 1.0)
{
*dest = (int)((m_size / 1024.0) / 1024.0);
}
else if ((m_size / 1024.0) >= 1.0)
{
*dest = (int)(m_size / 1024);
}
}
void writesyslog(int loglevel, std::string loginfo)
{
#ifdef ENLOG_SYSLOG
openlog("scanservice", LOG_CONS | LOG_PID, LOG_USER);
syslog(loglevel, "%s \n", loginfo.c_str());
closelog();
#endif
}
unsigned int u_get_proc_virtualmem(unsigned int pid)
{
char file_name[64] = {0};
FILE *fd;
char line_buff[512] = {0};
sprintf(file_name, "/proc/%d/status", pid);
fd = fopen(file_name, "r");
if (nullptr == fd)
{
return 0;
}
char name[64];
int vmsize;
for (int i = 0; i < VMSIZE_LINE - 1; i++)
{
fgets(line_buff, sizeof(line_buff), fd);
}
fgets(line_buff, sizeof(line_buff), fd);
sscanf(line_buff, "%s %d", name, &vmsize);
fclose(fd);
return vmsize;
}
unsigned int u_get_proc_mem(unsigned int pid)
{
char file_name[64] = {0};
FILE *fd;
char line_buff[512] = {0};
sprintf(file_name, "/proc/%d/status", pid);
fd = fopen(file_name, "r");
if (nullptr == fd)
{
return 0;
}
char name[64];
int vmrss;
for (int i = 0; i < VMRSS_LINE - 1; i++)
{
fgets(line_buff, sizeof(line_buff), fd);
}
fgets(line_buff, sizeof(line_buff), fd);
sscanf(line_buff, "%s %d", name, &vmrss);
fclose(fd);
return vmrss;
}
int u_get_total_mem()
{
const char *file = "/proc/meminfo"; //文件名
FILE *fd; //定义文件指针fd
char line_buff[256] = {0}; //读取行的缓冲区
fd = fopen(file, "r"); //以R读的方式打开文件再赋给指针fd
//获取memtotal:总内存占用大小
int i;
char name[32]; //存放项目名称
int memtotal; //存放内存峰值大小
char *ret = fgets(line_buff, sizeof(line_buff), fd); //读取memtotal这一行的数据,memtotal在第1行
sscanf(line_buff, "%s %d", name, &memtotal);
//fprintf(stderr, "====%s%d====\n", name, memtotal);
fclose(fd); //关闭文件fd
return memtotal;
}
std::string u_getmeminfo()
{
pid_t pid = getpid();
unsigned int virmem = u_get_proc_virtualmem(pid);
unsigned int procmem = u_get_proc_mem(pid);
int totalmem = u_get_total_mem();
std::string strinfo = "Scanservice current memory info,virtualmem= " + std::to_string(virmem) + " KB procmem = " + std::to_string(procmem) + " KB of " + std::to_string(totalmem) + " KB total";
return strinfo;
}
int u_get_fileSystem_info(const char *fileSystem_name,struct _fileSystem_info *fi)
{
struct statfs buf;
float fileSystem_total_size = 0;
float fileSystem_free_size = 0;
if (statfs(fileSystem_name, &buf))
{
fprintf(stderr, "statfs %s\n", strerror(errno));
return -1;
}
switch (buf.f_type)
{
case 0xEF51:
case 0xEF53:
sprintf(fi->fileSystem_format, "EXT");
break;
case 0x4d44:
sprintf(fi->fileSystem_format, "FAT");
break;
case 0x5346544e:
sprintf(fi->fileSystem_format, "NIFS");
break;
default:
sprintf(fi->fileSystem_format, "unknown");
break;
}
// bzero(&fi->fileSystem_total_capacity,sizeof(fi->fileSystem_total_capacity));
// bzero(&fi->fileSystem_free_capacity,sizeof(fi->fileSystem_free_capacity));
printf("blocks %ld\n", buf.f_blocks);
printf("bfree %ld\n", buf.f_bfree);
printf("bsize %ld\n", buf.f_bsize);
fileSystem_total_size =
(float)(u_kscale(buf.f_blocks, buf.f_bsize));
fileSystem_free_size =
(float)(u_kscale(buf.f_bfree, buf.f_bsize));
printf("total %f\n", fileSystem_total_size);
printf("free %f\n", fileSystem_free_size);
fi->fileSystem_total_capacity = fileSystem_total_size;
fi->fileSystem_free_capacity = fileSystem_free_size;
// convert_size(fileSystem_total_size,(int*)(&fi->fileSystem_total_capacity));
// convert_size(fileSystem_free_size,(int*)(&fi->fileSystem_free_capacity));
bzero(fi->fileSystem_permissions, sizeof(fi->fileSystem_permissions));
sprintf(fi->fileSystem_permissions, "rw");
return 0;
}