#include #include #include /* 硬件类型 */ #define MODEL "SG368Z(RK3568) HDMI+VGA (Linux)" /* 固件版本 */ #define FIRMWARE "V1.00" /* 固件版本 */ #define DATE "20240321-2343" void get_version_process(void); static void exec(char* data, char* command, char* filter); int main(int argc, char *argv[]) { if(argc == 1) { printf("Usage:\r\n"); printf("hvgo: show this usage\r\n"); printf("hvgo version: get version\r\n"); printf("\r\n"); return 0; } if(strcmp(argv[1], "version") == 0) get_version_process(); return 0; } void get_version_process(void) { char os_data[1024] = {0}, kernel_data[1024] = {0}; exec(os_data, "cat /etc/issue", "\\n \\l"); exec(kernel_data, "cat /proc/version", ""); /* 系统版本 */ printf("OS: %s\r\n", os_data); /* 硬件类型 */ printf("MODEL: %s\r\n", MODEL); /* 固件版本 */ printf("FIRMWARE: %s\r\n", FIRMWARE); /* 固件生成日期 */ printf("DATE: %s\r\n", DATE); /* 系统内核版本信息 */ printf("KERNEL: %s\r\n", kernel_data); printf("\r\n"); } void replace(char *str, char *orig, char *rep) { if(strlen(orig) > 0) { static char buffer[1024]; char *p; while (p = strstr(str, orig)) { memcpy(buffer, str, p-str); buffer[p-str] = '\0'; strcat(buffer, rep); strcat(buffer, p+strlen(orig)); strcpy(str, buffer); } } } void replace_char(char *str, char find, char replace) { for (int i = 0; str[i]; i++){ if (str[i] == find){ str[i] = replace; } } } static void exec(char* data, char* command, char* filter) { FILE *fp; char buffer[1024]; fp = popen(command, "r"); // 打开 messages 日志文件并只显示最后一行 fgets(buffer, sizeof(buffer), fp); strcpy(data, buffer); pclose(fp); replace(data, filter, ""); replace_char(data, '\n', ' '); replace_char(data, '\r', ' '); }