LInux基础(04)项目设计一(理解链表管理协议的代码架构)
要设计好一个项目必须要有一个健全的代码框架
一个结构体内有数据域和处理数据的函数指针, 先实现管理链表的函数 增加节点 删除节点 清空链表 遍历节点对每个节点进行操作
再实现协议的注册 把对象socket 添加到链表中进行管理
使用链表实现管理协议的操作 , 创建链表(LinkListInit)对象 ,
添加注册协议(尾部添加链表节点(RegisterProtocol)) ,
删除协议(头部删除(DeleteProtocol)) ,
遍历链表的节点并对每一个节点进行匹配函数操作(TraverseList) ,
删除指定ID的协议(删除指定节点(DeleteNode)),
清空链表(把所以节点删除(ClearProtocol)), 销毁协议对象(把链表对象置空(DestoryProtocolStack)), 返回链表长度(父链表对象的length(GetCurrentSize)).
注册HTTP协议(InitHttp):1.新建(对象)节点(malloc)
2.设置对象(t_data里 id = HTTP ; flag = inuse; init = 另外写一个函数(InitHttpNode)连接或监听; SendFunction = 另外实现发送函数(HttpSendFunction))
( InitHttpNode: 设置连接的 ip地址 端口号 或 监听 用的... HttpSendFunction : 发送send_buffer用的....
3.把创建并设置好的对象添加到(RegisterProtocol)到链表对象里
注册HTTPS TCP 协议的代码框架同HTTP
#include <stdio.h>
#include <stdlib.h> #define BUFFER_SIZE 0x1000 #define HTTP 0x1
#define HTTPS 0x2
#define TCP 0x3 #define INUSE 0x1
#define UNUSE 0x2 #define EMPTY 0x2
#define NOEMPTY 0x3 #define false 0
#define ture 1 /* Application parameters */
#define DEBUG (1)
/* Debug prints */
#if DEBUG
#define DBG_PRINT(fmt, args...) do{printf("[*]Listlink: <%s>: " fmt "\n" \
,__func__, ##args); } while (false)
#else
#define DBG_PRINT(...) do {} while (false)
#endif typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32; typedef struct _T_NodeStruct{
u8 id;
u8 flag;
u8 send_buffer[BUFFER_SIZE];
u32 (* Init)(void);
u32 (* SendFunction)(int fd,u8 *send_buffer,u32 length);
}T_NodeStruct;
typedef T_NodeStruct * Pt_NodeStruct; typedef struct _T_ListLinkNode{
T_NodeStruct t_data;
struct _T_ListLinkNode * pt_next;
}T_ListLinkNode;
typedef T_ListLinkNode * Pt_ListLinkNode; typedef struct _T_list{
Pt_ListLinkNode pfront;
Pt_ListLinkNode prear;
u32 length;
}T_list;
typedef T_list * Pt_list; void ClearProtocal( Pt_list ptlist ); //清空协议 利用Register调用的DeleteProtocol把链表内的节点全部删除
void DeleteNode(Pt_list ptlist,u8 id); //选择id进行删除节点
void DeleteProtocal(Pt_list ptlist, Pt_ListLinkNode ptlistnode ); //删除头节点并备份要删除的数据 , 第二个参数也可以给NULL不保存
void DestoryProtocalStack( Pt_list ptlist ); //把链表节点全部置空
u32 GetCurrentSize( Pt_list ptlist ); //获得当前链表的长度
u8 IsEmpty(Pt_list ptlist ); //判空
Pt_list ListLinkInit( void ); //创建链表对象
void RegisterProtocal(Pt_list ptlist,Pt_ListLinkNode ptlistnode ); //注册协议 , 把创建的节点对象添加到链表中,进行管理
void TraverseList( Pt_list ptlist, void(* Traverse)(Pt_ListLinkNode ptlistlinknode,u8 *));
//匹配函数,根据传入的函数对链表中的每个节点进行操作 //初始化协议节点
67 u32 HttpSendFunction(int sock,u8 *send_buffer,u32 length) //发送函数 write() 68 u32 InitHttpNode() //设置sockaddr_in socektaddr 的地址协议族 如:协议族 ip 端口
69 Pt_ListLinkNode InitHttp(Pt_list ptlist, u8* pdata , u32 length) //设置结构体
//SendFunction = HttpSendFunction Init = InitHttpNode memcpy(send_buffer ,send_buffer , sizeof(send_buffer))
LInux基础(04)项目设计一(理解链表管理协议的代码架构)的更多相关文章
- Linux基础知识第六讲,远程管理ssh操作
目录 Linux基础知识第六讲,远程管理ssh操作 一丶什么是SSH 1.什么是SSH 2.了解域名跟端口 二丶SSH命令以及远程连接linux进行维护 1.ssh命令格式 2.scp远程终端拷贝文件 ...
- Linux基础04
** Linux基本操作常用命令(四) ** Linux系统管理命令 1.top:查看系统资源,每隔三秒刷新一次,按q:退出浏览状态 2.free:查看内存信息,-m,以MB单位显示 3.netsta ...
- (大数据工程师学习路径)第一步 Linux 基础入门----文件系统操作与磁盘管理
介绍 本节的文件系统操作的内容十分简单,只会包含几个命令的几个参数的讲解,但掌握这些也将对你在学习后续其他内容的过程中有极大帮助. 因为本课程的定位为入门基础,尽快上手,故没有打算涉及太多理论内容,前 ...
- (大数据工程师学习路径)第一步 Linux 基础入门----用户及文件权限管理
用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李 ...
- linux基础-第十六单元 yum管理RPM包
第十六单元 yum管理RPM包 yum的功能 本地yum配置 光盘挂载和镜像挂载 本地yum配置 网络yum配置 网络yum配置 Yum命令的使用 使用yum安装软件 使用yum删除软件 安装组件 删 ...
- linux基础命令学习五(软件包管理、下载管理)
Linux 软件包管理 本文主要是记录下RedHat系列的软件包管理. 内容分为以下二个部分:二进制包的管理,源代码包的管理 一.二进制包的管理 1.1概念 主要有RPM和YUM这两种包管理. 两 ...
- Linux基础学习:文件与目录管理
目录与路径 目录的相关操作 几个特殊的目录: . :表示当前目录 .. :表示上一层目录 - :表示前一个工作目录 ~ :表示当前用户所在的主文件夹 ~account :表示account用户所在的主 ...
- Linux基础入门-用户及文件权限管理
一.Linux用户管理: 不同的用户的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于Linux的用户管理和权限机制,不同用户不能轻易查看.修改彼此的文件. 1. 查看用户: wh ...
- Linux基础学习(15)--启动管理
第十五章——启动管理 一.CentOS 6.x启动管理 1.系统运行级别: (1)运行级别: (2)运行级别命令: (3)系统默认运行级别: 2.系统启动过程: . 二.启动引导程序grub 1.Gr ...
随机推荐
- rundeck配置salt-api
Rundeck 安装: 系统: # cat /etc/issue CentOS release 6.7 (Final) 内核: # uname -r -.el6.x86_64 IP 地址: 172.1 ...
- 洛谷 P5269 欧稳欧再次学车 题解
P5269 欧稳欧再次学车 题目背景 请自行脑补一张欧稳欧学车的图 题目描述 欧稳欧学车时经常用一辆橡树车练习.这辆橡树车共有 \(N\) 个挡位,欧稳欧每秒可以把挡位增加或减少 \(1\),初始时( ...
- FPGA综合的约束
近日发现,有些逻辑电路的综合时间约束和布局布线约束相差太大时,难以布通.此时,应该选择尽量接近的时钟约束.
- 在itop4412移植linux4.14和设备树遇到的问题及解决
Linux4.14的设备树下已经对itop4412做了支持,本来应该很容易进行移植,可是在使用讯为给的资料中,对exynos4412-itop-scp-core.dtsi中原本的代码全部进行了注释,并 ...
- 五种IO模型
参考文档 https://www.jianshu.com/p/486b0965c296 概念说明 用户空间和内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空 ...
- 使用List中remove方法时需要注意的问题
String str1 = new String("1"); String str2 = new String("2"); String str3 = new ...
- 如何单独编译Linux内核源码中的驱动为可加载模块?
答: 分为两步: 1. 配置某个驱动为模块(如: CONFIG_RTC_XXX=m) 2. 指定路径并编译, 如编译drivers/rtc中的驱动 make SUBDIRS=drivers/rtc m ...
- RockBrain USB Server外设虚拟化高可用解决方案(银企直联虚拟化解决方案)
技术指标: 单.双千兆网络界面(支持链路冗余与链路热备.支持双网口均衡负载) 原生USB2.0接口(USB2.0与USB3.0接口均对所有USB版本设备兼容,支持混插) 技术优势: RockBrain ...
- spring MVC cors跨域实现源码解析 CorsConfiguration UrlBasedCorsConfigurationSource
spring MVC cors跨域实现源码解析 spring MVC cors跨域实现源码解析 名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议 ...
- nginx https 转发
add_header Content-Security-Policy upgrade-insecure-requests;