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 ...
随机推荐
- Centos7.4下安装PHP7.2.2
###安装php 安装PHP前,请先安装apache.yum install -y libxml2 libxml2-devel openssl openssl-devel libcurl curl-d ...
- 分布式系统之CAP原理
参考链接:http://blog.csdn.net/wireless_com/article/details/79153643 CAP是什么? CAP理论,被戏称为[帽子理论].CAP理论由Eric ...
- [Gamma阶段]第一次Scrum Meeting
Scrum Meeting博客目录 [Gamma阶段]第一次Scrum Meeting 基本信息 名称 时间 地点 时长 第一次Scrum Meeting 19/05/27 大运村寝室6楼 60min ...
- [Beta]Scrum Meeting#1
github 本次会议项目由PM召开,时间为5月6日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 beta初步计划 撰写博客整理文档 swoip 前端改进计划 模块松耦合 ...
- mstar 平台I2C 配置
芯片的pin 脚可以用作不同的功能,总结一句就是外设进行状态和数据交换. 最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置:// 如LED,屏的电源,背光的开关,功放的静音等等 ...
- java字符串格式化性能对比String.format/StringBuilder/+拼接
String.format由于每次都有生成一个Formatter对象,因此速度会比较慢,在大数据量需要格式化处理的时候,避免使用String.format进行格式化,相反使用StringUtils.l ...
- mysql中包含长字段索引的优化
不同于oracle,在mysql的Innodb存储引擎中,对索引的总长度有限制.在mysql 5.7中(https://dev.mysql.com/doc/refman/5.7/en/innodb-r ...
- C语言宏应用-------#define STR(X) #X
C语言宏应用-------#define STR(X) #X #:会把参数转换为字符串 #define STR(x) #x #define MAX 100 STR(MAX) 会被扩展成" ...
- SpringBoot入门-多环境文件配置(二)
pom.xml <name>springboot-application</name> <description>A project for Spring Boot ...
- Web自动化遇到shadowDOM节点操作(还没试)
近期有同学在做web自动化的时候,发现页面上有些元素,在selenium中无法通过xpath来定位,各种原因找了半天,都没找到解决方案. 最后发现元素在一个叫做shadow-root的节点下面. 如下 ...