【LVGL-字库应用】

LVGL-中文字库应用

  • ■ LVGL-内部字库
    • ■ LVGL 内部字库的使用流程:
  • ■ LVGL-自定义字库
    • ■ 方法一:C 语言数组(内部读取)-在线转换工具
    • ■ 方法二:C 语言数组(内部读取)-利用离线字体转换软件(V0.5 版本)
    • ■ 方法三:C 语言数组(内部读取)-离线字体转换软件(V0.4 版本) ,
    • ■ 方法三:文件系统读取字库(外部读取)- 【阿里】的离线字体转换软件(V0.5 版本)
  • ■ LVGL-中文字库应用
    • ■ 可从window中选择字库文件
    • ■ LVGL在线字体转换网页-在线字体转换配置
    • ■ 将生成的字体文件添加到工程中来。
    • ■ 测试代码
    • ■ 综合示例:

■ LVGL-内部字库

LVGL 提供了一套内置的字库,这些字库在移植的时候已经被添加到工程当中, 我们打开Middlewares/lvgl/src/font 分组, 即可找到这些字库文件。

■ LVGL 内部字库的使用流程:

步骤一. 打开 lv_conf.h 文件, 将所需要使用的内部字库使能
在这里插入图片描述
步骤二. 调用字库
使能了内部字库之后,用户就可以直接在字体设置函数中调用相应的字库了,
字号越大,文字越大,但其占用的内存也越多。

void lv_mainstart(void)
{lv_obj_t* label = lv_label_create(lv_scr_act());lv_obj_set_style_text_font(label,&lv_font_montserrat_16,LV_STATE_DEFAULT); //设置了 16 号字体lv_label_set_text(label,"Hello Word!!!!");
}

■ LVGL-自定义字库

■ 方法一:C 语言数组(内部读取)-在线转换工具

LVGL 官方的在线字体转换工具(网址: https://lvgl.io/tools/fontconverter) , 将字库文件(例如 TTF) 转换成 C 语言数组字体文件, 然后将其添加到工程中, 声明字体后即可调用。
在这里插入图片描述

使用在线转换工具生成字体需要七步:
① 在“Name”选项中填入字体名称。 注意: 该名称在声明字体的时候需要用到,请不要
使用中文名称;
② 在“Size”选项中填入字体的尺寸,这里是以像素为单位的;
③ 在“Bpp”选项中选择像素深度, 注意: 该值越大,则抗锯齿效果越好,但是对内存的
占用也会越高,一般的工程选择 4bbp 即可;
④ 选择字体文件,例如 ttf、 otf 格式的文件;
⑤ 在“Range”选项中填入文字编码范围, 以确定字体的转换范围。基本汉字的编码范围
是 0x4E00-0x9FA5, 数字、拉丁字母、标点符号的编码范围是 0x20-0x7E,这两个范围内已经
涵盖了两万多个字符, 可以满足绝大部分的使用场景。 关于文字的编码,大家感兴趣的话可以
在网上了解一下。 注意: 转换的范围越大,字库所占用的内存就越高, 在该选项中,建议大家
只填 0x20-0x7E。
⑥ 在“Symbols”选项中直接填入需要转换的文字。我们一般会将需要转换的汉字填入该
选项;
⑦ 点击“Convert”,即可生成字体文件(后缀为.c) 。

代码调用字体

LV_FONT_DECLARE(my_Font14) /* 声明字体 */
void lv_mainstart(void)
{lv_obj_t *font_label = lv_label_create(lv_scr_act());lv_obj_set_style_text_font(font_label, &my_Font14, LV_STATE_DEFAULT);lv_label_set_text(font_label, "你好");lv_obj_center(font_label);
}

■ 方法二:C 语言数组(内部读取)-利用离线字体转换软件(V0.5 版本)

利用离线字体转换软件(V0.5 版本) , 将中文字库转化为 C 语言数组文件。
【阿里】 , 其开发的离线转换软件可以帮助用户轻松地生成 LVGL字库, 大家可以在他的博客网址(http://dz.lfly.xyz/forum.php) 中下载字体转换软件.

使用方法:

  1. 打开 LvglFontTool V0.5 软件,点击“选择字体”
    在这里插入图片描述
  2. 在弹窗中选择所需字体
    在这里插入图片描述
  3. 加入常用汉字
    在这里插入图片描述
  4. 选择 LVGL 版本、 字体类型,设置字体名称,

在这里插入图片描述

  1. 点击“开始转换” 将会得到一个.c 文件。
  2. 参照方法一添加到工程中。

■ 方法三:C 语言数组(内部读取)-离线字体转换软件(V0.4 版本) ,

利用离线字体转换软件(V0.4 版本) , 将中文字库转化为 C 语言数组文件。 与方法二不同的是,我们此处使用的是自选的 TTF 字体文件(V0.4 版本软件支持该功能) , 具体的使用
方法如下

  1. 打开 LvglFontTool V0.4 软件点击“选择字体”
    在这里插入图片描述
  2. 在弹窗中选择所需的 TTF 字体, 设置字体大小,
    在这里插入图片描述
  3. 添加常用的汉字
    4.
  4. 选择 LVGL 版本、字体类型,设置字体名称,
    在这里插入图片描述
  5. 点击“开始转换”, 等待转换完成后, 点击“保存” 即可得到一个.c 文件。
  6. 添加到工程中去。

■ 方法三:文件系统读取字库(外部读取)- 【阿里】的离线字体转换软件(V0.5 版本)

  1. 打开 LvglFontTool V0.5 软件点击“选择字体”,
    在这里插入图片描述
  2. 选择所需字体
    在这里插入图片描述
  3. 加入常用汉字

在这里插入图片描述

  1. 选择版本、类型(XBF,外部 bin 文件),设置字体名称
    在这里插入图片描述

  2. 点击“开始转换”在弹窗中选择文件路径并点击“保存”。等待转换完成, 将会得到两个文件,它们的后缀分别为.c 和.bin。
    我们把.c 文件添加到工程中,而.bin 文件则放到 SD 卡里面(建议路径: 根目录→SYSTEM→LVFONT) 。

  3. 打 开 工 程 , 找 到 上 一 步 添 加 的 字 体 文 件 ( 例 如 示 例 中 的 Font12.c ) , 修 改__user_font_getdata 函数, 如下源码所示:

static uint8_t *__user_font_getdata(int offset, int size){/* 如字模保存在 SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);如字模已加载到 SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset); */norflash_ex_read(__g_font_buf,ftinfo.lvgl_12addr +offset,size);return __g_font_buf;
}

注意: 上述源码是以 Mini Pro H750 开发板为例的, 其他的开发板用户请根据实际的开发板例程来修改

  1. 添加汉字显示相关的 TEXT 文件
    在这里插入图片描述
  2. 修改 fonts.h 文件
/* 字体信息保存首地址
* 占 41 个字节,第 1 个字节用于标记字库是否存在.后续每 8 个字节一组,分别保存起始地址和文件大小
*/
extern uint32_t FONTINFOADDR;
/* 字库信息结构体定义
* 用来保存字库基本信息,地址,大小等
*/
typedef __PACKED_STRUCT
{uint8_t fontok; /* 字库存在标志, 0XAA,字库正常;其他,字库不存在 */uint32_t ugbkaddr; /* unigbk 的地址 */uint32_t ugbksize; /* unigbk 的大小 */uint32_t f12addr; /* gbk12 地址 */uint32_t gbk12size; /* gbk12 的大小 */uint32_t f16addr; /* gbk16 地址 */uint32_t gbk16size; /* gbk16 的大小 */uint32_t f24addr; /* gbk24 地址 */uint32_t gbk24size; /* gbk24 的大小 */uint32_t f32addr; /* gbk32 地址 */uint32_t gbk32size; /* gbk32 的大小 */uint32_t lvgl_12addr; /* LVGL12 地址 */uint32_t lvgl_12size; /* LVGL12 的大小 */uint32_t lvgl_24addr; /* LVGL24 地址 */uint32_t lvgl_24size; /* LVGL24 的大小 */uint32_t lvgl_36addr; /* LVGL36 地址 */uint32_t lvgl_36size; /* LVGL36 的大小 */
} _font_info;
  1. 修改 fonts.c 文件中的 FONT_GBK_PATH 和 FONT_UPDATE_REMIND_TBL 数组, 如下源码所示:
/* 字库存放在磁盘中的路径 */
char *const FONT_GBK_PATH[8] =
{"/SYSTEM/FONT/UNIGBK.BIN", /* UNIGBK.BIN 的存放位置 */"/SYSTEM/FONT/GBK12.FON", /* GBK12 的存放位置 */"/SYSTEM/FONT/GBK16.FON", /* GBK16 的存放位置 */"/SYSTEM/FONT/GBK24.FON", /* GBK24 的存放位置 */"/SYSTEM/FONT/GBK32.FON", /* GBK32 的存放位置 */"/SYSTEM/LVFONT/Font12.BIN", /* Font12 的存放位置 */"/SYSTEM/LVFONT/Font24.BIN", /* Font24 的存放位置 */"/SYSTEM/LVFONT/Font36.BIN", /* Font36 的存放位置 */
};
/* 更新时的提示信息 */
char *const FONT_UPDATE_REMIND_TBL[8] =
{"Updating UNIGBK.BIN", /* 提示正在更新 UNIGBK.bin */"Updating GBK12.FON ", /* 提示正在更新 GBK12 */"Updating GBK16.FON ", /* 提示正在更新 GBK16 */"Updating GBK24.FON ", /* 提示正在更新 GBK24 */"Updating GBK32.FON ", /* 提示正在更新 GBK32 */"Updating Font12.BIN", /* 提示正在更新 Font12 */"Updating Font24.BIN", /* 提示正在更新 Font24 */"Updating Font36.BIN", /* 提示正在更新 Font36 */
};
  1. 修改 fonts.c 文件中的 fonts_update_fontx 函数
/**
* @brief 更新某一个字库
* @param x, y : 提示信息的显示地址
* @param size : 提示信息字体大小
* @param fpath : 字体路径
* @param fx : 更新的内容
* @arg 0, ungbk;
* @Arg 1, gbk12;
* @arg 2, gbk16;
* @arg 3, gbk24;
* @arg 4, gbk32;
* @param color : 字体颜色
* @retval 0, 成功; 其他, 错误代码;
*/
static uint8_t fonts_update_fontx( uint16_t x,uint16_t y,uint8_t size,uint8_t *fpath,uint8_t fx,uint16_t color)
{uint32_t flashaddr = 0;FIL *fftemp;uint8_t *tempbuf;uint8_t res;uint16_t bread;uint32_t offx = 0;uint8_t rval = 0;fftemp = (FIL *)mymalloc(SRAMIN, sizeof(FIL)); /* 分配内存 */if (fftemp == NULL)rval = 1;tempbuf = mymalloc(SRAMIN, 4096); /* 分配 4096 个字节空间 */if (tempbuf == NULL)rval = 1;res = f_open(fftemp, (const TCHAR *)fpath, FA_READ);
if (res)rval = 2; /* 打开文件失败 */
if (rval == 0)
{
switch (fx)
{
case 0: /* 更新 UNIGBK.BIN */
/* 信息头之后,紧跟 UNIGBK 转换码表 */
ftinfo.ugbkaddr = FONTINFOADDR + sizeof(ftinfo);
ftinfo.ugbksize = fftemp->obj.objsize; /* UNIGBK 大小 */
flashaddr = ftinfo.ugbkaddr;
break;
case 1: /* 更新 GBK12.BIN */
/* UNIGBK 之后,紧跟 GBK12 字库 */
ftinfo.f12addr = ftinfo.ugbkaddr + ftinfo.ugbksize;
ftinfo.gbk12size = fftemp->obj.objsize; /* GBK12 字库大小 */
flashaddr = ftinfo.f12addr; /* GBK12 的起始地址 */
break;
case 2: /* 更新 GBK16.BIN */
/* GBK12 之后,紧跟 GBK16 字库 */
ftinfo.f16addr = ftinfo.f12addr + ftinfo.gbk12size;
ftinfo.gbk16size = fftemp->obj.objsize; /* GBK16 字库大小 */
flashaddr = ftinfo.f16addr; /* GBK16 的起始地址 */
break;
case 3: /* 更新 GBK24.BIN */
/* GBK16 之后,紧跟 GBK24 字库 */
ftinfo.f24addr = ftinfo.f16addr + ftinfo.gbk16size;
ftinfo.gbk24size = fftemp->obj.objsize; /* GBK24 字库大小 */
flashaddr = ftinfo.f24addr; /* GBK24 的起始地址 */
break;
case 4: /* 更新 GBK32.BIN */
/* GBK24 之后,紧跟 GBK32 字库 */
ftinfo.f32addr = ftinfo.f24addr + ftinfo.gbk24size;
ftinfo.gbk32size = fftemp->obj.objsize; /* GBK32 字库大小 */
flashaddr = ftinfo.f32addr; /* GBK32 的起始地址 */
break;
case 5:/* 更新 LVGL12.BIN */ (1)
ftinfo.lvgl_12addr=ftinfo.f32addr+ftinfo.gbk32size;
ftinfo.lvgl_12size=fftemp->obj.objsize;
flashaddr=ftinfo.lvgl_12addr;
break;
case 6:/* 更新 LVGL24.BIN */ (2)
ftinfo.lvgl_24addr=ftinfo.lvgl_12addr+ftinfo.lvgl_12size;
ftinfo.lvgl_24size=fftemp->obj.objsize;
flashaddr=ftinfo.lvgl_24addr;
break;
case 7:/* 更新 LVGL36.BIN */ (3)
ftinfo.lvgl_36addr=ftinfo.lvgl_24addr+ftinfo.lvgl_24size;
ftinfo.lvgl_36size=fftemp->obj.objsize;
flashaddr=ftinfo.lvgl_36addr;
break;
}
while (res == FR_OK) /* 死循环执行 */
{
res = f_read(fftemp, tempbuf, 4096, (UINT *)&bread); /* 读取数据 */
if (res != FR_OK)break; /* 执行错误 */
/* 从 0 开始写入 bread 个数据 */
norflash_ex_write(tempbuf, offx + flashaddr, bread);
offx += bread;
/* 进度显示 */
fonts_progress_show(x, y, size, fftemp->obj.objsize, offx, color);
if (bread != 4096)break; /* 读完了. */
}
f_close(fftemp);
}
myfree(SRAMIN, fftemp); /* 释放内存 */
myfree(SRAMIN, tempbuf); /* 释放内存 */
return res;
}
  1. 修改 fonts.c 文件中的 fonts_update_font 函数,
/**
* @brief 更新字体文件
* @note 所有字库一起更新(UNIGBK,GBK12,GBK16,GBK24,GBK32)
* @param x, y : 提示信息的显示地址
* @param size : 提示信息字体大小
* @param src : 字库来源磁盘
* @arg "0:", SD 卡;
* @Arg "1:", FLASH 盘
* @arg "2:", U 盘
* @param color : 字体颜色
* @retval 0, 成功; 其他, 错误代码;
*/
uint8_t fonts_update_font( uint16_t x,uint16_t y,uint8_t size,uint8_t *src,uint16_t color){uint8_t *pname;uint32_t *buf;uint8_t res = 0;uint16_t i, j;FIL *fftemp;uint8_t rval = 0;res = 0XFF;ftinfo.fontok = 0XFF;pname = mymalloc(SRAMIN, 100); /* 申请 100 字节内存 */buf = mymalloc(SRAMIN, 4096); /* 申请 4K 字节内存 */fftemp = (FIL *)mymalloc(SRAMIN, sizeof(FIL)); /* 分配内存 */if (buf == NULL || pname == NULL || fftemp == NULL){myfree(SRAMIN, fftemp);myfree(SRAMIN, pname);myfree(SRAMIN, buf);return 5; /* 内存申请失败 */}/* 先查找文件 UNIGBK,GBK12,GBK16,GBK24,GBK32,LVGL12.BIN,LVGL24.BIN,LVGL36BIN 是否正常 */for (i = 0; i < 8; i++) (1){strcpy((char *)pname, (char *)src); /* copy src 内容到 pname */strcat((char *)pname, (char *)FONT_GBK_PATH[i]); /* 追加具体文件路径 */res = f_open(fftemp, (const TCHAR *)pname, FA_READ);/* 尝试打开 */if (res){rval |= 1 << 7; /* 标记打开文件失败 */break; /* 出错了,直接退出 */}}myfree(SRAMIN, fftemp); /* 释放内存 */if (rval == 0) /* 字库文件都存在. */{/* 提示正在擦除扇区 */lcd_show_string(x, y, 240, 320, size, "Erasing sectors... ", color);for (i = 0; i < FONTSECSIZE; i++) /* 先擦除字库区域,提高写入速度 */{/* 进度显示 */fonts_progress_show(x + 20 * size / 2, y, size, FONTSECSIZE,i, color);/* 读出整个扇区的内容 */norflash_ex_read((uint8_t *)buf, ((FONTINFOADDR /4096)+i) * 4096, 4096);for (j = 0; j < 1024; j++) /* 校验数据 */{if (buf[j] != 0XFFFFFFFF)break; /* 需要擦除 */}if (j != 1024){/* 需要擦除的扇区 */norflash_ex_erase_sector((FONTINFOADDR / 4096) + i);}}/* 依次更新 UNIGBK,GBK12,GBK16,GBK24,GBK32,LVGL12.BIN,LVGL24.BIN,LVGL36BIN */for (i = 0; i < 8; i++){lcd_show_string(x, y, 240, 320, size,FONT_UPDATE_REMIND_TBL[i], color);strcpy((char *)pname, (char *)src);strcat((char *)pname, (char *)FONT_GBK_PATH[i]);res = fonts_update_fontx(x + 20 * size / 2, y, size,pname, i, color);if (res){myfree(SRAMIN, buf);myfree(SRAMIN, pname);return 1 + i;}}/* 全部更新好了 */ftinfo.fontok = 0XAA;/* 保存字库信息 */norflash_ex_write((uint8_t *)&ftinfo, FONTINFOADDR, sizeof(ftinfo));}myfree(SRAMIN, pname); /* 释放内存 */myfree(SRAMIN, buf);return rval; /* 无错误. */
}
  1. 打开 lv_conf.h 文件,找到 LV_FONT_CUSTOM_DECLARE 配置项, 声明该字体, 如下源码所示:
#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(Font12)
  1. 编写示例代码:
void lv_mainstart(void)
{lv_obj_t* label = lv_label_create(lv_scr_act());lv_obj_set_style_text_font(label,& Font12,LV_STATE_DEFAULT);lv_label_set_text(label,"Hello ALIENTEK!!!!");
}

在这里插入图片描述

■ LVGL-中文字库应用

在这里插入图片描述

■ 可从window中选择字库文件

在这里插入图片描述

■ LVGL在线字体转换网页-在线字体转换配置

lvgl在线字体转换网页
在这里插入图片描述
在这里插入图片描述

■ 将生成的字体文件添加到工程中来。

在这里插入图片描述

■ 测试代码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

■ 综合示例:

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2905787.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

销售的业绩和合同无法统一管理可以通过系统实现吗?

这个问题我们在日常管理中也遇到过&#xff0c;在没有使用软件之前&#xff0c;合同原件没有专人负责打理&#xff0c;销售人员签了合同后&#xff0c;直接把原件随手放在柜子里&#xff0c;或者把数据记录到excel表中。 但是每个人的工作习惯不一样&#xff0c;记录的表格也不…

Spring boot 发送文本邮件 和 html模板邮件

Spring boot 发送文本邮件 和 html模板邮件 提示&#xff1a;这里使用 spring-boot-starter-mail 发送文本邮件 和 html模板邮件 文章目录 Spring boot 发送文本邮件 和 html模板邮件一、开启QQ邮箱里的POP3/SMTP服务①&#xff1a;开启步骤 二、简单配置①&#xff1a;引入依赖…

Linux系统使用Docker部署MinIO结合内网穿透实现公网访问本地存储服务

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

①胃癌单细胞和配对转录组揭示胃肿瘤微环境(文献和数据)

目录 文献内容 胃癌细胞微环境格局 肿瘤基质的特征存在活化的成纤维细胞 肿瘤内皮细胞与血管生成途径 巨噬细胞显示炎症二分法 淋巴细胞转向免疫抑制和分化表型 细胞通信网络揭示了胃癌发展的潜在驱动因素 胃癌免疫治疗批量RNA-seq的整合揭示了细胞和分子的反应倾向 数…

Web漏洞-深入WAF注入绕过

目录 简要其他测试绕过 方式一:白名单&#xff08;实战中意义不大&#xff09; 方式二:静态资源 方式三: url白名单 方式四:爬虫白名单 #阿里云盾防SQL注入简要分析 #安全狗云盾SQL注入插件脚本编写 在攻防实战中&#xff0c;往往需要掌握一些特性&#xff0c;比如服务…

Zabbix6 - Centos7源码编译部署HA高可用集群手册

Zabbix6 - Centos7源码编译部署HA高可用集群手册 HA高可用集群 总所周知,在我们IT运维的圈圈中,HA高可用集群服务算是逼格最高的吧也是运维里保障力度最大的环境。 HA是HighlyAvailable缩写,是双机集群系统简称,提高可用性集群,是保证业务连续性的有效解决方案,一般有两个…

6款好用的AI写作助手,为大家解决创作困难

写作出高质量的文章对于每个创作者来说是非常重要&#xff0c;但有时候在面对繁重的写作任务时&#xff0c;大家可能会陷入创作困境&#xff0c;思绪纷乱、灵感枯竭。&#xff0c;但随着人工智能技术的不断发展&#xff0c;AI写作助手已经成为了许多创作者的得力帮手&#xff0…

Java代码混淆技术在应用程序保护中的关键作用与应用

摘要 本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义。通过混淆技术&#xff0c;可以有效防止代码被反编译、逆向工程或恶意篡改&#xff0c;提高代码的安全性。常见的Java代码混淆工具如IPAGuard、Allatori、DashO、Zelix KlassMaster和yGuard等&#xff0…

Acwing_795前缀和 【一维前缀和】+【模板】二维前缀和

Acwing_795前缀和 【一维前缀和】 题目&#xff1a; 代码&#xff1a; #include <bits/stdc.h> #define int long long #define INF 0X3f3f3f3f #define endl \n using namespace std; const int N 100010; int arr[N];int n,m; int l,r; signed main(){std::ios::s…

OpenHarmony实战开发-Web组件的使用

介绍 本篇Codelab使用ArkTS语言实现一个简单的免登录过程&#xff0c;向大家介绍基本的cookie管理操作。主要包含以下功能&#xff1a; 获取指定url对应的cookie的值。设置cookie。清除所有cookie。免登录访问账户中心。 原理说明 本应用旨在说明Web组件中cookie的管理操作。…

Siemens S7-1500TCPU 运动机构系统功能简介

目录 引言&#xff1a; 1.0 术语定义 2.0 基本知识 2.1 运动系统工艺对象 2.2 坐标系与标架 3.0 运动机构系统类型 3.1 直角坐标型 3.2 轮腿型 3.3 平面关节型 3.4 关节型 3.5 并联型 3.6 圆柱坐标型 3.7 三轴型 4.0 运动系统的运动 4.1 运动类型 4.1.1 线性运动…

OpenHarmony中的LLDB高性能调试器

概述 LLDB&#xff08;Low Lever Debugger&#xff09;是新一代高性能调试器。详细说明参考 LLDB官方文档 。 当前OpenHarmony中的LLDB工具是在 llvm15.0.4 基础上适配演进出来的工具&#xff0c;是HUAWEI DevEco Studio工具中默认的调试器&#xff0c;支持调试C和C应用。 工…

C++ Primer (第五版)第七章习题部分答案(上)

在我自学C过程中&#xff0c;我选择了CPrimer这本书&#xff0c;并对部分代码习题进行了求解以及运行结果。接下来几个月我将为大家定时按章节更新习题答案与运行结果&#xff0c;运行环境&#xff08;Visual Studio Code&#xff0c;windows 11&#xff09;&#xff1a; C P…

open Gauss 数据库-03 openGauss数据库维护管理指导手册

目录 前言 openGauss数据库维护管理 1 操作系统参数检查 1.1 实验介绍 1.2 场景设置及操作步骤 2 openGauss 运行健康状态检查 2.1 实验介绍 2.2 场景设置及操作步骤 3 数据库性能检查 3.1 实验介绍 3.2 通过 gs_checkperf 工具来检查数据库性能 3.3 通过 EXPLAIN …

探索父进程和子进程

文章目录 通过系统调用查看进程PID父进程、子进程 通过系统调用创建进程-fork初识为什么fork给父进程返回子进程的PID&#xff0c;给子进程返回0fork函数如何做到返回两个值一个变量为什么同时会有两个返回值&#xff1f;bash总结 通过系统调用查看进程PID getpid()函数可以获…

Go语言学习Day6:数组与切片

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1. 数组① 什么是数组② 数组的声明③ 初始化数组的几种方式④ 遍历数组元素⑤ 数组为值类型⑥ 数…

Go语言爬虫实战(线程池)

Go语言爬虫实战 目标 利用go语言爬取指定网站的图片。实现爬取网站任意页面所有所需的图片。实现使用go语言线程池开启多个线程爬取图片内容。最后实现创建多个文件夹存储图片。 爬取网站图片 步骤 对指定URL发去GET请求&#xff0c;获取对应的响应。 resp, err : http.Get(…

SQL Server 实验二:数据库视图的创建和使用

目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码&#xff1a; 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…

【Unity】TextMeshPro富文本

启用富文本 在Unity里&#xff0c;如果需要使用富文本&#xff0c;首先需要开启Rich Text 如果不开启Rich Text&#xff0c;就会在UI上显示富文本代码 1.粗体 <b>Game</b> Over2.斜体 <i>Game</i> Over3.下划线 <u>Game</u> Over4…

【Linux】网络编程套接字二

网络编程套接字二 1.TCP网络编程1.1TCP Server服务端1.2 TCP Client客户端 2.Server 多进程版本2.1普通版2.2 信号版 3.Server 多线程版4.Server 线程池版5.日志函数重新设计6.守护进程7.TCP协议通讯流程8.TCP和UDP 对比 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&…