自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

转载 log4cxx日志系统

本文主要从log4cxx级别、layout、格式化、命名规则、Filter几个方面介绍。一、log4cxx命名规则 Logger由一个String类的名字识别,logger的名字是大小写敏感的,且名字之间具有继承的关系,子名有父名作为前缀,用点号.分隔。如:x.y是x.y.z的父亲。根logger (root logger)是所有logger的祖先,它具有如下属性:1) 它...

2019-04-23 10:01:06 396

转载 无边界检查函数

strcpy,sprintf,strcat对于strcpy,sprintf,strcat这些不安全的函数的讨论应该算是不少了,大家都知道可以用strncpy,snprintf和strncat来替换它们。但实际工作中似乎这些“安全版”的函数带来的疑惑还是不小,总结了一下,列在这里。  1.sprintf(char * str, const char * format, ...) ->...

2019-04-15 11:00:33 239

原创 typedef和define的区别

1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:#define PI 3.1415926程序中的:area=PI*r*r 会替换为3.1415926*r*r如果你把#define语句中的数字9 写成字母g 预处理也照样带入。2)typedef是在编译时处理的。它在自己的作用域...

2018-09-06 17:02:09 166

原创 聊天室

1、文件传输:fprintf和fwrite的区别fprintf(fp, "%d", buffer); 是将格式化的数据写入文件fprintf(文件指针,格式字符串,输出表列);fwrite(&buffer, sizeof(int), 1, fp);是以二进位方式写入文件fwrite(数据,数据类型大小(字节数),写入数据的最大数量,文件指针);一句话表述:fwrite是将数...

2018-08-28 14:10:26 393

原创 长连接&短连接以及心跳包

一、长连接与短连接1、长连接: 指在一个TCP连接上可以连续发送多个数据包,        在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接;        一般需要自己做在线维持。 2、短连接: 指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接;        一般银行都使用短连接。         它的优点是:管理起来比较简单,...

2018-08-22 15:01:54 910

原创 并发服务器之多线程和多路复用(select)的区别

一、I/O复用模型1、IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复...

2018-08-22 11:31:58 6331

原创 C++多继承模型的内存布局

对于多继承情况考虑示例代码 1 2 3 struct Base1 {...}; struct Base2 {...}; struct Derived : Base1, Base2 {...}; 有如下内存布局首先出现的是派生类Derived类的虚表指针vptr(这里插入一个提醒:一直以来vptr都被国人...

2018-08-22 10:19:23 409

转载 运算符优先级口诀

一共有十五个优先级: 1   ()  []  .  ->2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / %4   + - 5   >> <<  6   > >= < <= 7   == !=   8   & ...

2018-08-13 09:32:26 193

转载 ReadDir()线程不安全函数

一、readdir函数:      struct dirent *readdir(DIR *dirp); The  data  returned by readdir() may be overwritten by subsequent calls to readdir() for the same directory stream.成功时,readdir() 返回指向 dirent ...

2018-08-10 16:13:18 873

转载 linux--man 1/2/3查找的区别

man (1) 命令man 2 xxx用于系统调用man 3 xxx 用于库函数如果某个库函数没有同名的命令和系统调用,那才能直接用man xxx

2018-08-10 10:52:45 585

原创 0809线程

一、线程取消(1)int   pthread_cancel(pthread_t   thread)   发送终止信号给thread线程,如果成功则返回0,否则为非0值。发送成功并不意味着thread会终止。   (2)pthread_setcanceltype()函数用来设置当前线程的“可取消类型”,并且将先前的类型返回到oldtype引用中。“可取消类型”的合法值分别是:   ...

2018-08-10 10:17:51 104

原创 文件流操作:fseek()、rewind()、fprintf()、fscanf()

1、fseek() int fseek(FILE * stream, long offset, int whence); 函数说明:fseek()用来移动文件流的读写位置.1、参数stream 为已打开的文件指针,2、参数offset 为根据参数whence 来移动读写位置的位移数。参数 whence 为下列其中一种:    SEEK_SET 从距文件开头offse...

2018-08-06 10:44:09 1018

转载 seekg()/seekp()与tellg()/tellp()的用法详解

对输入流操作:seekg()与tellg()对输出流操作:seekp()与tellp()下面以输入流函数为例介绍用法:seekg()是对输入文件定位,它有两个参数:第一个参数是偏移量,第二个参数是基地址。对于第一个参数,可以是正负数值,正的表示向后偏移,负的表示向前偏移。而第二个参数可以是:ios::beg:表示输入流的开始位置ios::cur:表示输入流的当前位置ios::end:...

2018-08-04 10:08:17 423

原创 Linux即时通信软件项目chatroom知识点整理(五)

21、TCP是如何保证可靠数据传输的1)应用数据被分割成TCP认为最适合发送的数据块。 这和UDP完全不同,应用程序产生的数据报长度将保持不变(将数据截断为合理的长度) 2)超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 3)TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 4)...

2018-08-01 11:11:28 1046

原创 Linux即时通信软件项目chatroom知识点整理(四)

17、如何实现文件传输?如果文件过大,如何保证数据正确地传输?(1)客户端之间传输文件A、B两用户登录服务器成功之后,便可使用文件传输API接口传送文件,当A使用API接口:BRAC_TransFile向B发送文件时,B收到文件后,将触发B的回调函数:文件传输回调函数(参考:BRAC_SetTransFileCallBack)内核使用UDP通道传输,不保证接收方收到的顺序与发送顺序相同...

2018-07-30 21:15:19 227

原创 Linux即时通信软件项目chatroom知识点整理(三)

11、谈谈你对进程的理解?内核是如何管理进程的?(1) 进程是多任务并发的基本概念。进程是操作系统的核心,所有基于多道程序设计的操作系统都建立在进程的概念上。进程是操作系统的概念。是操作系统资源分配和调度的基本单位,在执行一个程序时,对于操作系统来说就是建立了一个进程。在这个过程中,伴随着资源的分配和释放。进程是系统中正在运行的程序,是一个程序一次执行的过程,是一个动态的实体,随着系统...

2018-07-29 20:18:38 581 2

原创 Linux即时通信软件项目chatroom知识点整理(二)

6、为什么数据库选择sqlite?还有那些嵌入式数据库?特点是什么?(1)SQLITE功能简约,小型化,追求最大磁盘效率;只是单机上用的,数据量不是很大,需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适.(2) 嵌入式数据库及其特点**************************SQLite**************************主页:http:...

2018-07-28 21:31:17 377

原创 Linux即时通信软件项目chatroom知识点整理(一)

1、makefile的作用是什么?makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是--“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。makefil...

2018-07-26 20:15:32 649

转载 MakeFile

1、规则:目标:依赖1 依赖2命令*说明:使用命令,将依赖生成目标注意:目标顶格写,命令前有一个TAB键,不能使用空格代替命令执行条件:a. “依赖”文件 比 “目标”文件 新b. 没有“目标”这个文件满足上述条件之一,命名就会执行2、简单的Makefile在源文件下新建一个Makefile文件,内容为:test:a.c b.c a.hgcc -o test a.c...

2018-07-26 19:44:29 119

转载 指针的一些复杂说明

●int p; -- 这是一个普通的整型变量● int *p; -- 首先从p处开始,先与*结合,所以说明p是一个指针,然后再与int结合,说明指针所指向的内容的类型为int型。所以p是一一个返回整型数据的指针。 ●int p[3] --首先从p处开始,先与结合,说明p是一一个数组,然后与int结合,说明数组里的元素是整型的,所以p是一个由整型数据组成的数组。 ●int *p[3];...

2018-07-26 19:11:33 129

原创 MadPlay项目中设计的知识点

一、wait和waitpid区别:1.在一个子进程终止前,wait使调用者阻塞2.waitpid有一个选择项,可以使调用者不阻塞3waitpid可以等待指定的一个子进程,wait等待所有的子进程,返回任意一个终止的子进程状态。子进程在运行中有暂停信号,如果想要显示暂停信号的信号码不能使用wait()要用waitpid()4、waitpid的返回值比wait稍微复杂一些,一共有3种情况:...

2018-07-26 16:36:46 502

原创 PCB画板Tips

一、步骤转载自https://blog.csdn.net/yiyunyaoling/article/details/64123101二、Tips1、放置元器件之前要考虑并预留出打孔的位置2、VCC线30mil,引脚连线15mil3、绘制原理图添加元器件时要edit,检查是否有对应的封装4、元器件及封装没有时可以自己画5、PCB布线完成之后选择工具——滴泪滴泪可以使焊...

2018-07-21 14:21:04 145

原创 标准模板库预习

一、容器1、序列式容器:线性数据结构,包含vector、deque、list(1)vector动态数组,可以从数组尾部快速插入或删除数据,直接访问任何元素(2)deque双端队列,可以从头部、尾部快速插入或删除数据,直接访问任何元素(3)双向链表,删除或插入任何位置的数据,但访问元素没有上两种直接方便2、关联式容器:非线性数据结构(二叉树),插入元素:先通过键值找到位置,再将元素的实际值放进去(1...

2018-04-24 19:02:16 128

原创 C++标准输入输出/C++异常机制/自定义模板

一、C++标准输入输出1、四个类对象cin:标准输入流(键盘)cout:标准输出流(显示器)ceer:标准错误流(不带缓冲区),直接输出到显示器clog:标准错误流(带缓冲区),先把要输出的内容放到缓冲,直到缓冲区满或遇到换行endl才输出到 显示器2、C++标准输入:在istream输入流类中定义对“>>”重载的一组公用成员函数,具体声明格式    istream& oper...

2018-04-17 17:08:44 428

转载 C++继承预习

一、C++类的3种继承方式,分别是public继承,protected继承,private继承。最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认private。struct则相反,默认的是public继承。二、继承的构造函数与析构函数调用顺序1、构造函数:创建子类时先调用基类的构造函数然后再调用自己的构造函数2、析构函数:子类是调用自身的析构...

2018-03-30 17:12:35 159

转载 深入讨论构造函数和运算符重载

一、构造函数(一)复制构造函数(深拷贝和浅拷贝)1、构造拷贝函数:用一个已有的对象,构造和它同类型的副本; class xxx { xxx (const xxx &that) {...} }; &that是引用,拷贝构造函数推荐使用引用,如果直接传递值,那么会导致无限递归;2 、如果一个类没有定义拷贝构造函数,系统会提供一个缺省拷贝构造函数:值的简单复制        缺省拷贝构造...

2018-03-24 13:31:31 454

原创 C++面向对象基

1.C++的类类的成员默认是私有的,而结构体的成员默认是公共的。2.this 指针在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this, 它的值是当前被调用的成员函数所在的对象的起始地址。在调用成员函数时,系统隐式地将对象的起始地址传递给成员函数,使this指针得到当前对象的地址。于是在成员函数中对数据成员的引用,就按照this的指向找到对象的数据成员,实现对数据成员的操作...

2018-03-17 23:00:17 88

转载 时间片轮转法

主要用于分时系统中的进程调度。为了实现轮转调度,系统把所有就绪进程按先入先出的原则排成一个队列。新来的进程加到就绪队列末尾。每当执行进程调度时,进程调度程序总是选出就绪队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位,通常为10~100ms数量级。当进程用完分给它的时间片后,系统的计时器发出时钟中断,调度程序便停止该进程的运行,把它放入就绪队列的末尾;然后,把CPU分给

2018-01-27 19:46:10 1070

转载 磁盘访问时间计算

1.寻道时间,启动磁臂的时间s与磁头移动n条磁道所花费的时间之和t=m*n+s(一般磁盘,m=0.2,高速磁盘,m2.旋转延迟时间,是指定扇区移动到磁头下面所经历的时间3.传输时间 ,指把数据从磁盘读出或向磁盘写入数据所经历的时间 若每次读/写的字节数为b,磁盘每秒钟的转速为r,一条磁道上的字节数为N t=b/(rN)

2018-01-16 13:06:04 8644

转载 为什么不能用二级指针直接指向二维数组

!!!!二维数组和二重指针没有直接对应关系!!!!二维数组只需要取一次地址,通过指针的移动就可以遍历所有元素;而二级指针需要取两次地址。int a[3][4];int **p=a;是错误的,等价于**p=&a[0][0];那么p是a[0][0]的地址,*p=1,**p再取地址就出现段错误;但是指针字符串可以用(详细见本文)

2017-12-12 10:11:03 700

转载 数组名a和&a的区别

1、a表示&a[0],也即对数组首元素取地址,a+1表示首地址+sizeof(元素类型)。2、&a虽然值为数组首元素地址,但类型为:类型 (*)[数组元素个数],所以&a+1大小为:首地址+sizeof(a)。   &a取得是整个数组的地址!既数组名取地址等价于对数组取地址。在学习c语言的过程中我们可以发现一个一维数组的的数组名往往具有两层含义:  *作为数组名代表

2017-12-01 18:57:34 1268

转载 为什么要用malloc函数

在C语言中,要进行动态内存的开辟就需要使用到malloc函数。malloc函数工作机制(1)malloc函数被调用时,它会沿空闲链表寻找一个可以满足需求的内存块,然后把所需大小的内存块分配给用户,剩下的返回到链表上。free函数被调用时,它将释放的内存块连接到空闲链表上。(2)到最后,空闲链表会被分成很多小的内存片段,当用户申请一块较大的内存空间时,空闲链表上可能没

2017-12-01 18:36:12 3381

转载 sizeof和strlen;define和inline

*****sizeof(只计算不运算)和strlen的区别****一、sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。    由于在编译时计算,因此sizeof不能用来返回动态分配的内存空

2017-11-21 23:11:34 156

转载 C语言预习作业

1.什么是计算机程序?什么是编程语言?为什么需要编程语言?编程语言是用来干嘛的?举例一些编程语言以及他们各自的特点。答:计算机程序:是指一组指示计算机每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标的体系结构上。 编程语言:专门和计算机交流的语言就叫做编程语言,俗称计算机语言需要编程语言的原因:电脑每做的一次动作,一个步骤,都是按照已经用编程语言编好的程序来

2017-11-20 21:28:39 392

原创 段错误之一记录(11.12课程代码出现的问题)

**********出现段错误**********#includeint main(){ printf("%d\n",wln(a));//a未定义,未赋值;调用函数出现错误,会一直陷入死循环 return 0; }int wln(int a){ printf("%d\n",a); return a*2;} 正确代码1#includei

2017-11-18 13:32:51 204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除