- 博客(24)
- 收藏
- 关注
原创 粘包问题
流协议与粘包TCP是个流协议TCP是基于字节流传输的,只能维护发出去多少,确认多少,没有维护消息与消息之间的边界,因此可能导致粘包问题。粘包问题解决方法是在应用层维护消息边界。 如图反应了包在网络中的传输情况。我们无法预知TCP接收缓冲区中收到的数据原本的边界是什么。产生原因TCP是一个字节流、无边界的。对于客户端和服务端来说,一次读操作,不保证能读完数...
2018-04-23 19:27:57
254
原创 网络编程
Socket编程基本模型基本API#includeint socket(int domain, int type, int protocol);//创建一个套接字用于通信//domain :指定通信协议族(protocol family)//type:指定socket类型,流式套接字SOCK_STREAM,数据报套接字SOCK_DGRAM,原始套接字SOCK_RAW/
2018-01-29 14:46:48
257
原创 信号相关
时序竞态unsigned int mysleep(unsigned int seconds) { int ret; struct sigaction newact, oldact; newact.sa_handler = sig_alrm; sigemptyset(&act.sa_mask); acr.sa_flags = 0; sigac
2018-01-26 22:02:42
311
原创 守护进程
守护进程特点:后台服务程序;独立于控制终端(不依赖终端,在后台运行);周期性执行某任务; 不受用户登录注销影响;一般以d结尾的名字(服务)。进程组进程组的组长:组里的第一个进程;进程组ID 等于 进程组组长的D。会话会话:多个进程组。创建一个会话注意事项:不能是进程组组长;创建会话的进程称为新进程组组长;需要root权限执行此
2018-01-25 18:34:46
219
原创 管道总结
管道分类匿名管道命名管道匿名管道原理:匿名管道其本质就是内核缓冲区(内核所划分的一片内存),磁盘上不存在对应的文件;其大小一般为4K;其实现时使用一个环形队列。特点:管道具有阻塞的性质。半双工的通信方式。适用于亲缘进程间。管道操作使用pipe(int pipefd[2])函数, 0读1写。读操作 有数据的情况下: re
2018-01-23 16:31:35
190
原创 进程基础总结
进程概念 正在执行中的程序。进程终止 有八种方式使进程终止:五种正常返回,三种异常终止。 五种正常返回为: 1. 从main函数返回; 2. 调用exit; 3. 调用_exit或_Exit; 4. 最后一个线程从其启动例程返回; 5. 从最后一个线程调用pthread_exit; 三种异常终止方式为: 6.
2018-01-23 15:37:19
150
原创 程序的装入和连接
程序在系统中运行,必须经过以下几个步骤。 (1)编译,由编译程序对用户源程序进行编译,形成若干个目标模块。 (2)连接,由链接程序将编译后形成的一组目标模块以及他们所需要的库函数链接在一起,形成一个完整的装入模块。 (3)装入,由装入程序(Loader)将装入模块装入内存。程序的装入 绝对装入方式 适用单道程序,因为可预测程序将驻留在内存什么位置。用户将程序编译后,将产生绝
2018-01-01 13:31:30
1813
原创 进程控制
进程控制 Unix提供了大量的从C程序中操作进程的系统调用。进程的创建和终止程序总是处于下面三种状态之一:运行:进程要么在CPU上执行,要么在等待被执行且最终会被内核调度。停止:进程的执行被挂起,且不会被调度。当收到SIGSTOP、SIGTSTP、SIGTTIN或者SIGTTOU信号时,进程就停止,并且保持停止直到它收到一个SIGCONT信号,这时进程才再次开始运行。(信号是一种软中断)
2017-12-25 15:23:33
194
原创 进程
进程 异常是允许操作系统内核提供进程概念的基本构造块,进程是计算机科学中最深刻、最成功的概念之一。进程提供给应用程序的关键抽象:一个独立的逻辑控制流,它提供一个假象,好像我们的程序独占的使用处理器。一个私有的地址空间,它提供一个假象,好像我们的程序独占的使用内存系统。逻辑控制流进程可以向每个程序提供一个假象,好像它在独占使用处理器。如果想用调试器单步执行程序,我们将会看到一系列的程序计数
2017-12-24 17:17:11
292
原创 PPP协议
一、数据链路层的三个基本问题(一)封装成帧 帧首部和帧尾部的一个重要作用就是进行帧定界,使用SOH和EOT这两个控制字符。(二)透明传输 由上图可看,通过增加转义字符实现了透明传输。(三)差错检验传输过程中可能会产生比特错误:1可能变成0,0也可能变成1。 误码率:在一段时间,传输错误的比特占所传输比特总数的比特率 利用CRC循环冗余检验算法计算出帧检验序列FCS,再将FCS加入到
2017-12-24 16:37:09
6303
原创 TCP连接的建立与终止
一、三次握手 上图可见TCP三次握手过程。 其中需要注意的是步骤一、SYN = 1且ACK = 0。SYN为1时,源于协议的设计SYN和FIN各占一个字节的序号。 且步骤一和步骤二进行同步请求时,SYN为1,之后SYN为0。为什么需要步骤三,客户A再发送一次ACK?因为网络原因,可能客户A向服务器B发送了一个SYN同步请求连接在网络中滞留了一会。然而客户A在超时重传的事件内,没有收
2017-12-21 22:28:06
188
原创 TCP的定时器
TCP坚持定时器 引言:TCP通过让接收方指明希望从发送方接收的数据字节进行流量控制。设置了窗口为0,这将组织发送方传送数据,直到变为非0。TCP保活定时器
2017-12-21 21:54:47
160
原创 异常
一、异常 异常就是控制流中的突变,用来响应处理器状态中的某些变化。二、异常处理 系统中可能的每种类型的异常,都分配了一个唯一的非负整数的异常号。其中一部分是操作系统的设计者分配的,一部分是处理器设计者分配的。 1. 由图可见,调用异常处理程序的过程是一个间接过程。 2. 每一种类型的异常都有对应的处理程序。 3. 异常处理程序运行在内核模式下。 4. 如果控制从用户转移
2017-12-21 20:14:23
139
原创 服务器基本框架
服务器编程框架 模块 单个服务器程序 服务器机群 I/O处理单元 处理客户链接,读写网络数据 作为接入服务器,实现负载均衡 网络存储单元 本地数据库、文件或缓存 数据库服务 请求队列 各单元之间的通信方式 各服务器之间的永久TCP连接 请求队列是各单元之间的通信方式的抽象,通常被实现为池的一部分。对于服务器机群而言,请求队列是各台服务器之间预先建立的、
2017-11-14 21:49:23
553
原创 IP初探
IP初探IP基本知识 IP地址是因特网上的每一个主机的每一个接口分配一个全世界唯一的32位标识符。IP地址编码的发展(1)分类的IP地址 (2)子网的划分 (3)构成超网分类的IP地址就是将IP地址分为若干个固定类型,每类由两个固定长度字段组成。第一个字段是网络号,第二个字段是主机号。网络号在整个因特网范围内都必须是唯一的。一个主机号在他前面网络号所指明的网络范围内必须是唯一的。因此IP在
2017-11-13 20:19:03
352
原创 多线程编程
线程模型创建线程和结束线程 函数名 返回值 作用 pthread_create 成功返回0,错误返回错误码 创建线程 pthread_exit 永远不会失败 确保线程安全退出,其参数向线程回收者传递退出信息.(注意不可使用exit()) pthread_join 成功返回0,错误返回 回收线程,函数会阻塞至被回收线程
2017-11-05 16:28:12
175
原创 I/O复用总结
一.什么是I/O复用?假设我们拥有1000个线程进行读写操作,但是我们大部分时间都耗费在等待的时间上,同时1000个线程对资源占用和CPU的开销很大,因此使用一个线程来监控1000个读写操作符的状态,当其中某一个描述符状态就绪时,用一个线程去处理已经就绪的状态,这样对资源占用和CPU的开销就会十分少了。 I/O多路复用:多路网络连接复用一个IO线程。同时需要指出I/O复用虽然可以监听多个文件描述
2017-10-11 17:24:40
542
原创 关于对象初探
C++对象一个对象的大小取决于其非静态成员变量的大小,如果存在有虚函数则还需要增加一个虚指针的大小(64位下8字节)。 这段代码是在64位的系统下进行编译的,Test类的对象大小为24,则可以得到是, test_x、test_y、test_const、vptr的大小加起来为24。 其中static成员的大小是不计算为类对象的大小,同时因为存在虚函数,所以多了一个虚指针,且虚指针占用整个对象的
2017-10-02 14:22:12
219
原创 多态
多态 分类 绑定 英文 例子 编译时多态 早绑定 overload 函数和运算符重载 运行时多态 晚绑定 override 继承和虚函数覆盖(重写:override)与虚函数的使用覆盖产生的三个条件1.继承 2.子类覆盖(重写)父类虚函数 3.父类的指针/引用指向子类 多态的效果:同样的语句调用产生不同的效果,是设计模式的基础,框架的基石。虚
2017-09-24 16:35:33
215
原创 继承分析
继承 对于继承关系,如果不写限定符,默认为 privaete。成员访问权限总结 public protected private 类成员函数 √ √ √ 友元函数 √ √ √ 子类函数 √ √ × 类对象 √ × × 子类继承了父类所有的成员变量和成员函数。与访问限定无关。访问限制符只限制了访问。 子类访问
2017-09-24 15:43:05
234
原创 C++类与对象
C++复习类与对象struct和class的区别:在C++中struct和class的区别只有两点。 1.struct的默认限定符为public,而class为private。 2.struct可以使用{…}进行初始化,而class不可以。(class在C++11标准支持初始化列表进行初始化) class如果使用默认限定符,在用{…}进行初始化时,必须使用初始列表进行初始化,且C++9
2017-09-09 18:31:03
654
原创 信号量
信号量的学习1. Posix 的信号量sem_open()、sem_close()、sem_unlink()函数sem_t * sem_open(const char *name, int oflag, … )不定参为 /* mode_t mode, unsigned int value */ oflag可以为O_CREAT或者O_CREAT|O_EXCL, 如果指定了O_CREAT
2017-05-25 00:42:52
556
原创 共享内存
共享内存的学习共享内存是可用IPC形式中最快的,使用共享内存可以减小系统的开销。共享内存分为两种形式 1.Posix共享内存区 2.System V共享内存区1. Posix共享内存区Posix共享内存区涉及两个必要步骤。(1)指定一个名字参数调用shm_open()函数,产生一个新的共享内存或者打开一个已经存在的共享内存区对象。(2)调用mmap将这个共享区映射到内存中。Posix
2017-05-23 12:06:06
224
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人