Linux基础项目开发1:量产工具——页面系统(六)

简介: Linux基础项目开发1:量产工具——页面系统(六)

一、数据结构抽象

很多产品的页面设计都有类似的效果,如以下这些系统的页面

对于每一个页面,抽象出如下结构体,

核心在于其中的Run函数:

page_manager.h

#ifndef _PAGE_MANAGER_H
#define _PAGE_MANAGER_H
 
typedef struct PageAction {
  char *name;
  void (*Run)(void *pParams);
  struct PageAction *ptNext;
}PageAction, *PPageAction;
 
void PageRegister(PPageAction ptPageAction);
void PagesRegister(void);
PPageAction Page(char *name);
 
#endif

第10行:注册一个页面

第11行:注册多个页面

第12行:在链表里找到同名的页面名字

二、页面管理器

页面管理器用来管理页面,只需要实现2个函数:

1. PagesRegister : 把多个页面注册进链表

2. Page(name) :取出某个页面

page_manager.c

 
#include <common.h>
#include <page_manager.h>
#include <string.h>
 
static PPageAction g_ptPages = NULL;
 
void PageRegister(PPageAction ptPageAction)
{
  ptPageAction->ptNext = g_ptPages;
  g_ptPages = ptPageAction;
}
 
PPageAction Page(char *name)
{
  PPageAction ptTmp = g_ptPages;
 
  while (ptTmp)
  {
    if (strcmp(name, ptTmp->name) == 0)
      return ptTmp;
    ptTmp = ptTmp->ptNext;
  }
 
  return NULL;
}
 
 
void PagesRegister(void)
{
  extern void MainPageRegister(void);
  MainPageRegister();
}
 

第6行:存放链表头

第8~12行:链表,用于将页面头文件注册到链表里,与头文件进行链接

第14~26行:在链表中找到同名的页面

三、单元测试

创建一个PageAction MainPage:

1.main_page.c

 
#include <page_manager.h>
#include <stdio.h>
 
static void MainPageRun(void *pParams)
{
  printf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
}
 
static PageAction g_tMainPage = {
  .name = "main",
  .Run  = MainPageRun,
};
 
void MainPageRegister(void)
{
  PageRegister(&g_tMainPage);
}

第7行:__FILE__文件,__FUNCTION__ 函数名,__LINE__ 行数

第17行:将构建的结构体注册进上层的页面管理器

2.page_test.c

#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/fb.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
 
#include <page_manager.h>
 
int main(int argc, char **argv)
{
  PagesRegister();
  Page("main")->Run(NULL);
  return 0; 
}
 
 

第16行:将页面管理器注册进去

第17行:调用Page里面的Run函数传入NULL

3.unitttest下的Makefile

EXTRA_CFLAGS  := 
CFLAGS_file.o := 
 
#obj-y += disp_test.o
#obj-y += input_test.o
#obj-y += font_test.o
#obj-y += ui_test.o
obj-y += page_test.o

4.page下的Makefile

EXTRA_CFLAGS  := 
CFLAGS_file.o := 
 
obj-y += page_manager.o
obj-y += main_page.o

四、上板测试

1.ubuntu上

book@100ask:~/source$ make
book@100ask:~/source$ cp -r 23_page_unittest/ ~/nfs_rootfs/

2. 开发板上

[root@100ask:/]#  mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
[root@100ask:/mnt/23_page_unittest]# ./test ./simsun.ttc

3.运行效果:


目录
相关文章
|
4月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
349 3
Linux系统禁用swap
|
4月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
419 4
|
4月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
690 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
457 0
Linux系统初始化脚本
|
4月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
357 16
|
4月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
239 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
4月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
397 1
|
4月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1092 1
|
4月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
504 1
二、Linux文本处理与文件操作核心命令
|
4月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
347 137