在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
11-安全传输平台项目扩展-第01天(C复习-C++复习-keymngclient重构)
目录:
一、课程目标
二、安全传输平台项目扩展——C复习-C++复习
1、C语言知识体系复习-两个模型
2、C语言知识体系复习-指针做函数api实现
3、C语言知识体系复习-模拟函数调用入栈出栈内存模型
4、C语言知识体系复习-间接赋值的重要性和成立三个条件
5、C++语言知识体系复习-多态理解1
6、C++语言知识体系复习-多态理解2
7、C++语言知识体系复习-C和C++横向比较
8、C语言知识体系复习-回调函数
9、C++面向抽象类编程思想回顾
三、安全传输平台项目扩展——keymngclient重构
1、项目需求和方案
2、C++类对象之间的关系-依赖和关联
3、密钥协商客户端业务流复习
4、keymngclient设计与实现-思路
5、keymngclient设计与实现-keymngclient的hello
6、keymngclient设计与实现-LogHelper类
7、keymngclient设计与实现-myipc类
8、keymngclient设计与实现-KeyMng_ShmOp类
9、keymngclient设计与实现-应用程序框架类和业务流类设计思想
10、keymngclient设计与实现-keymngclientapp
11、keymngclient设计与实现-keymngclientop
12、keymngclient设计与实现-初始化流程编写
13、keymngclient设计与实现-初始化流程调试
14、keymngclient设计与实现-密钥协商编写和调试
一、课程目标
用C++重构安全传输平台
深入理解C语言知识体系
两个模型(函数调用、内存四区模型)
指针做函数参数(一级指针、二级指针、三级指针;指针的输入和输出)
函数指针做函数参数
C语言项目开发理念:接口的封装和设计、模块之间解耦合
深入理解C++语言知识体系
封装、继承、多态
项目开发中C++工具的应用
C++项目开发理念(面向抽象类编程)
进一步理解安全传输平台secmngclient和secmngserver的业务模型
用C++做开发常见套路
二、安全传输平台项目扩展——C复习-C++复习
1、C语言知识体系复习-两个模型
》两个模型(函数调用、内存四区模型)
示例:main函数调用fun1()函数,fun1()函数调用fun2()函数,fun2()函数调用fun3()函数:
问题1:在函数main中分配的内存,在fun3()中能用吗?
都能用
问题2:在函数fun3()中分配的内存 在main函数中能用吗?
内存 堆 栈 全局区(静态变量) 代码区——要看分配的内存在哪,全局和malloc(栈)得到的可以用
》理念:输入和输出
角度:站在被调用函数的调度去思考 函数1调用函数2
输入:函数1调用函数2,在函数1中分配内存,供函数2使用
输出:函数1调用函数2,在函数2中分配内存,供函数1使用
2、C语言知识体系复习-指针做函数api实现
》指针做函数参数(一级指针、二级指针、三级指针;指针的输入和输出)
案例1:指针做函数参数
需求:写一个接口 完成配置文件的读 要求一次性把N行数据 返给调用者
>dm01_指针做函数参数.c
#define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "string.h" //间接赋值成立的三个条件 //条件1: 定义两个变量 (形参 实参) //条件2: 建立关联 若为函数调用 实参取地址 传给 形参 //条件3: 在被调用函数中 *p 实参的地址 去 间接的修改实参的值 // 用N级形参 去修改 N-1级实参的值 //写一个接口 完成配置文件的读 要求一次性把N行数据 返给调用者 int getFileContent(char *pFileName/*in*/, char ***p, int *nLine) { char **tmpP = NULL; int i = 0; tmpP = (char **)malloc(sizeof(char *)* 10); if (tmpP == NULL) { printf("func getFileContent() err: "); return -1; } for (i = 0; i < 10; i++) { tmpP[i] = (char *)malloc(20); sprintf(tmpP[i], "%d%d%d", i, i, i); } //间接赋值 *p = tmpP; //*p实参的地址 放在=的左边 去间接的修改 实参的值 //*p1 = *p2; *nLine = 10; return 0; } int getFileContent_Free(char **p, int iLine) { int i = 0; if (p == NULL) { return 0; } for ( i = 0; i < iLine; i++) { free(p[i]); } free(p); //p = NULL; return 0; } // 既可以把指针所指向的内存空间给释放掉 并且把实参重新赋值成NULLL int getFileContent_Free2(char ***p, int iLine) { getFileContent_Free(*p, iLine); *p = NULL; return 0; } int main() { int ret = 0, i = 0; char *myFileName = "c:\1.txt"; char **myP = NULL; int myLine = 0; printf("hello...\n"); //获取文件内容 ret = getFileContent(myFileName, &myP, &myLine); if (ret != 0) { printf("func getFileContent() err:%d \n", ret); return ret; } //打印文件内容 按照行 for (i = 0; i < myLine; i++) { printf("%s\n", myP[i]); } //getFileContent_Free(myP, myLine); getFileContent_Free2(&myP, myLine); system("pause"); return 0; }