自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 I/O复用实现方式:select、poll、epoll

I/O多路复用是指:内核监视多个描述符,一旦某个描述符读就绪或者写就绪,就通知程序进行相应的读写操作。多进程、 多线程、 进程池、 线程池每一个执行序列在同一时刻只能处理一个 socket(监听、 链接)。 以线程池为例: 如果创建 N 个线程,同一时刻只能处理 N 个客户连接,而I/O 复用在一个进程或者一个线程中,能同时监听多个 socket。 当有 socket 上有事件发生时, 程序 才

2017-11-20 21:42:37 256

原创 TCP介绍及TCP网络编程

一、TCP头部结构: ①16位端口号及16位目的端口号:告知主机该报文段来自哪里(源端口)要传给那个上层协议或应用程序(目的端口)。 ②32位序号:一次TCP通信过程中某一个传输方向上的字节流的每个字节的编号。A发送给B的第一个报文段中,序号值被系统初始化为某个随机值ISN,后续在该方向上的TCP报文段的序号值被设置为ISN加上该报文段所携带数据的第一个字节在整个字节流中的偏移。 ③32位

2017-11-12 00:05:50 3906

原创 C与C++的区别(上)

一、函数的默认值int sum(int a,int b){ return a+b;}int main(){ int a = 10; int b = 20; sum(a,b);}以上代码sum(a,b)的反汇编为00C3144C mov eax,dword ptr [b] 00C3144F push eax 00C314

2017-11-07 01:29:12 369

原创 进程间通信——消息队列

消息队列是一种临时存储消息的队列, 完成进程间数据传递, 优先级队列。与信号量对比: 都以内核对象来确保多进程访问同一个消息队列, 信号量进行进程同步控制, 消息队列发送实际数据。与管道对比: 管道发送的数据没有类型, 读取数据端无差别从管道中按照数据的前后顺序读取数据;消息队列数据有类型,读端可以根据数据类型读取特定数据。管道是一个文件;消息队列是一个数据结构(类似于链表)。管道文件是存放在磁盘上

2017-11-02 21:50:25 303

原创 函数调用堆栈

一个函数的运行在栈上开辟内存。 在函数调用时,第一个进栈的是主函数调用语句的下一条可执行语句的地址,然后是函数的各个参数。在大多编译器中,参数是由右往左入栈的,然后再是函数中的局部变量。 下面给一个实例:int sum(int a,int b){ int tmp = 0; tmp = a+b; return tmp;}int main(){ int a = 1

2017-10-27 01:13:40 349

原创 进程间通信——共享内存

共享内存是最快的IPC,在各个进程都有指针直接指向开辟内存区域。 访问时当做本进程中的一个内存控制直接操作。 管道是文件,操作慢;消息队列创建操作都有消耗所以慢;共享内存两个进程都可以直接对这块内存进行读写。1、创建共享存储区 每个进程都用自己的地址空间映射到不同的物理地址,哪怕虚拟地址是样,也是各自独立、互相不可见的。只有声明了这个共享存储区之后,才可以往这个公共的区域映射。 函数原型:in

2017-10-26 15:27:43 256

原创 进程间通信之——信号量

信号量相当于记录资源能同时被多少个进程访问。 信号量的作用:进程间同步控制。 信号量有一个初值,每当有进程申请使用信号量,就会通过一个P操作对信号量进行-1操作,当计数器减到0的时候就说明没有资源了,其他进程要想访问就必须等待,当该进程执行完这段工作之后,就会执行V操作,即对信号量进行+1操作。头文件:#include <sys/types.h> #include <sys/ipc.h> #

2017-10-24 15:46:55 265

原创 进程间通信——管道(有名管道、无名管道)

进程间通信:多个进程之间数据相互交换。 进程间通信的方式:信号、管道(无名管道、有名管道)、信号量、消息队列、共享内存、套接字。 进程的创建:pid_t fork(void);管道的原理: 有名管道:应用于两个进程之间数据的单向传递。 创建:命令方式:mkfifo 函数方式:mkfifo() 打开:open 写数据:write 读数据:read

2017-10-21 03:42:04 389

原创 Linux环境下模拟shell终端:mybash、mysu、myclear

通常shell中执行命令的流程都是bash进程创建了一个子进程,然后子进程进程替换,替换为可执行的命令文件。 1、mybash函数:输出信息的格式是:[用户名@主机名所在文件]$(root用户:[用户名@主机名所在文件]#)。当所在文件就是当前用户的家目录时显示“~”。 那么,该如何得到用户名,主机名和当前所在文件名呢? 我们需要借助下面这些函数: uid_t geteuid(void)函数

2017-10-20 17:51:31 1179

原创 字符串的查找:朴素查找算法和KMP算法

Q:一个字符串A”abcabbcabcd”,要想知道里面是否包含另一个字符串a”abcd”?按照我们以前所学,无非就是设置i和j记录两个字符串的下标,将两个字符串同时遍历,如果A串的i和a串的j下标所对应的字符一样,那么我们就让i,j同时向后遍历++,然而,绝大多数情况是i和j匹配失败,按照我们以前所学,匹配失败后A退回到i原来位置的下一个位置即:i=i-j+1,j=0。这种算法就叫朴素查找算法

2017-10-18 02:40:29 552

原创 Linux下fork函数的使用

fork函数每调用一次,函数返回两次,新进程(子进程)中返回0,原进程(父进程)中返回子进程的pid。Q:为什么不是子进程中返回父进程pid,父进程中返回0呢?那是因为一个父进程有很多子进程,如果不返回其特定子进程的pid,之后需要调用其子进程时就找不到这个子进程了;而一个子进程只有一个父进程,如果要看其父进程的pid只需要通过调用getppid()函数即可。举一个简单的例子 代码如下图

2017-09-01 00:38:22 639

原创 数据结构排序

在数据结构中,排序有以下几种分类:(1)按存储位置分为内部排序和外部排序; (2)按排序算法或者逻辑分为插入排序、选择排序、交换排序、归并排序和基数排序; (3)按排序结果分为升序和降序。说到排序就可以说到稳定性。稳定性我们可以理解为:在待排序数字中的重复数据,在排序前后的相对前后位置不变。 其中, 稳定的有:直接插入排序、冒泡排序、归并排序、基数排序 不稳定的有:Shell排序、选择排序

2017-08-31 02:37:21 375

原创 数据结构之链表(单链表、循环链表)

链接方式存储的线性表简称为链表。以“结点的序列”表示线性表称作单链表。用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)。链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据以结点

2017-08-25 17:10:39 464

原创 结构体及共用体的大小

结构体: 第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始,如:int( 在32位机中为4字节,64位机中为8字节)要从4或8的整数倍地址开始存储,需补齐。

2017-08-24 02:39:05 621

原创 前缀、中缀、后缀的相互转换

前缀 中缀 后缀波兰式 通常表达方式(计算机看不懂) 逆波兰式

2017-08-24 02:19:29 792

原创 位运算符

按位取反 按位与 按位或

2017-08-24 02:13:46 263

原创 数据结构之顺序表

数据结构中,线性表分为两种:顺序表和链表。顺序表逻辑相邻,物理也相邻;链表逻辑相邻,物理不相邻。线性表的特点:正确性、可读性、健壮性、通用性。顺序表:在计算机内存中以数组形式保存的线性表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。一维数组是定长顺序表。定长顺序表 算法实现//头文件#ifnd

2017-08-24 01:20:40 306

空空如也

空空如也

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

TA关注的人

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