本人已申请将51CTO博客搬至CSDN.
内部排序:数据记录在内存中进行排序外部排序:待排序文件较大,需要访问外存常见的内部排序:插入排序(直接插入、折半插入、希尔排序)、交换排序(冒泡、快排)、选择排序(简单选择、堆排序)、归并排序(2路归并)、基数排序外排:归并排序(多路归并)、各种内排的性能比较:插入排序每次将一个待排序的记录按关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成每一轮能够确定一个最终位置的记录,某时刻的状态
今天,完成一下epoll的封装。类图 首先,还是画下类图,初步设计一下。 具体函数,我们下面详解。epoll封装EpollBase类CEpollBase.h:classCEpollBase{public:CEpollBase(intmax_events);virtual~CEpollBase();boolCreate(intsiz
今天,学习一下socket的封装。类图 首先,我们把需要封装的各个类初步的设计如下: 接下来,我们建立类与类之间的关系: 其中,CStream类可有可无,这个类是用来封装各种读写流的。socket封装stream类stream.h:classCStream{public:CStream(intfd=-1);~
之前使用IPC编写过聊天程序,但是这样仅能在同一台计算机上进行聊天;要使得在不同的计算机(不同的IP+端口)上也能进行通信,就需要用到socket编程。前面说到,要处理多客户端的响应问题,需要I/O复用,即调用select或者epoll。通常我们使用epoll函数,以下例子也是。 接下来,我们需要封装一个地址类。为什么要封装这样一个类呢? &
(上一篇地址)前面使用socket完成一个服务器对应多个客户端的小实验的时候,针对TCP连接,我们必须得创建新的进程来与新的客户端通信。那么,就意味着,1000个客户端就有有1000个server进程,这显然是不实际的。如果,我们可以提前把要监听的文件描述符放到一个集合里,一旦其中一个发生事件(不管是连上,还是通信),就去处理。这样,会方便很多。所以,今天学习一下IO复用。1五个I/O模型阻塞I/
之前说的用于进程间通信的几种方式:消息signal、管道pipe、消息队列msg、共享内存shm、信号量sem。都只适用于一台主机上的进程间通信,那么如何实现两台计算机之间的进程通信呢?所以,来了解一下异地进程通信。1异地进程通信协议层为双方的主机通信进程分配“端口”和缓冲区,以便异地进程间的通信。1.1TCP/IP协议以下是OSI参考模型与TCP/IP参考模型的对应关系:1.1.1TCP/IP协
二叉树数组表示Tree.h:#ifndef_TREE_H_#define_TREE_H_#include<iostream>usingnamespacestd;typedefintElemType;//元素类型classCTree{public:CTree(intisize,ElemType*root);//创建树~CTree();//销毁树ElemType*SearchNode(in
上次说到,使用消息队列可以做到简易的登录、退出功能。那么,该思考一下,聊天的用户列表和聊天记录应该存在哪儿呢?当然是服务器上,那么,就需要用到共享内存了。共享内存共享内存允许两个不相关的进程去访问同一部分逻辑内存如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案共享内存是由IPC为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共享内存段“
消息队列上次说到了进程间通信的管道,不过匿名管道有个缺点就是,只能做到有亲缘关系的进程间通信,所以今天学习一个新的进程间通信方式——消息队列。消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限消息队列函数头文件#in
现在linux使用的IPC(Inter-ProcessCommunication,进程间通信)方式有以下几种:-(1)管道(pipe)和匿名管道(FIFO)-(2)信号(signal)-(3)消息队列-(4)共享内存-(5)信号量-(6)套接字(socket)什么是管道管道是Unix中最古老的进程间通信的形式。我们把一个进程连接到另一个进程的一个数据流成为一个“管道”。管道是半双工的,数据只能向一
linux下公有64个信号,kill-l查看一下:可以看到,缺少了32、33两个未知信号,从这里分界,前面31个信号是不可靠信号,后面的是可靠信号。当进程发生阻塞的时候(一下子发送很多信号),不可靠信号容易丢失。如何去验证呢?可以在2(不可靠信号)号信号和34(可靠进程)号信号屏蔽期间,不断向某个进程发送这两个信号,待解除屏蔽后,观察是否丢失。这里测试的时候,要注意一下,9-SIGKILL19-S
上次说到的,不能做到实时通信。那么开两个进程就可以了,一个用来监听是否有消息传来,一个用来等待用户输入。那么,先来复习一下进程的相关概念。进程结构linux中进程包含PCB(进程控制块)、程序以及程序所操纵的数据结构集,可分为“代码段”、“数据段”和“堆栈段”。进程状态运行状态R(TASK_RUNNING)可中断睡眠状态S(TASK_INTERRUPTIBLE)不可中断睡眠状态D(TASK_UNI
免安装版的mysql安装,说白了就是用命令安装。跟在linux下安装软件一样的。安装第一步首先,去官网上http://dev.mysql.com/downloads/mysql/下载安装包,后缀名为.zip的。然后,解压缩。第二步如果里面有默认的配置文件my-default.ini。打开,修改以下三行。没有的话,自己建一个my.ini。文件内容:[client]port=3306default-c
C++连接MySQL数据库有两种方式:1、通过MySQL的CAPI(决定使用这种方式)也可以使用MySQL++。[Mysql++是官方发布的、一个为MySQL设计的C++语言的API。Mysql++为Mysql的C-Api的再次封装,它用STL(StandardTemplateLanguage)开发并编写,并为C++开发者提供像操作STL容器一样方便的操作数据库的一套机制]2、通过MySQL的Co
主机串口用到的工具是SSCOM32,虚拟机串口工具是VSPD。即通过VSPD工具,可以将二者的串口相连,可以想象成有一根串口线连接了主机和虚拟机。第一步确定端口打开VSPD,如下图,点击“Portpairs”-“createpair“。我们要用到的就是COM1和COM2。此时,二者状态都是:close。然后,打开虚拟机,“虚拟机”-“设置”-“串口”-选择端口号,并开启,确认。如下图,这样代表该串
系统调用系统调用是操作系统提供给用户的一组“特殊接口”。系统调用并非直接和程序员或系统管理员直接打交道,而是通过软中断的方式向内核提交请求,从而获取内核函数的服务入口(系统调用表)。系统调用让系统从用户空间进入内核空间内运行,运行后将结果返回给应用程序(内核态->用户空间)。系统调用和系统API等区别系统API主要是通过C库libc来实现,程序员多采用这种方式与内核交互,这些API通过系统调
文件锁的类型1读锁共享锁,如果A进程对文件的某区域加了读锁,B进程也可以在此区域加读锁,但是不能对此区域加写锁。2写锁独占锁,如果A进程对文件的某个区域加了写锁,B进程就不能对此区域加写锁,也不能对此区域加读锁。当多个进程同时对一个文件进行读写操作时,为确保文件的完整和一致性,这几个进程要加锁同步。当进程开始读取文件的某个区域时,先加读锁,读完之后再解锁。下面举个加写锁的例子:#include&l
静态链接库: •扩展名:.a •编译行为:在编译的时候,将函数库直接整合到执行程序中(所以利用静态库编译生成的文档会更大) •独立执行的状态:编译成功的可执行文件可以独立运行,不需要再向外部要求读取函式库的内容 •更新:如果函式库更新,需要将整个项目程序重新编译 •好处:方便程序移植动态链接库: •扩展名:.so •编译行为:在
1makefile基本规则TARGET…:DEPENDENCIES… COMMAND …·目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。·依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。·命令(COMMAND)是make执行的动作,一个可以有多个命令,每个占一
将自己写的链表生成共享库 1、编译 2、设置库名: 库的名称格式:lib+XXX+版本号.so(库的名称为XXX)-shared生成共享文件库-fpic动态链接 3、把头文件和.so文件放到系统目录下(使用共享库了,把之前的#include“list.h”改成#include<list.h>,删除该文件夹内的l
1文本编辑工具vi vi是Linux/Unix底下最常用的文本编辑器。vim是vi的升级版本,它不仅兼容vi的所有命令,而且还加入了一些新的特性。1.1vi的三种工作方式1.2编辑方式光标定位 M移动光标到页面中央 L移动光标到页面尾处 H移动光标到页面开始处 Ctrl+f向后翻页 Ctrl+b向前翻页 0移动光标到行首&ems
第一步 写一个后台运行程序,比如:往一个文件里1s添加一个字符。保证正确运行。(&表示后台运行)第二步 写服务的配置文件:第三步实现(a.txt出现在根目录下)第四步服务自启动 添加服务并查看服务状态,按照之前文件写的默认都是关闭的。用命令或者修改之前的配置文件都可以。1)修改配置文件上图红色内容为:chkconfig3580802)命令
1常用的构造hash函数的方法1.1直接定址法 1、原理:取关键字或关键字的某个线性函数值为哈希值。、 2、公式:H(key)=key或H(key)=a*key+b 3、适合查找表较小且连续的情况 4、优点:简单、均匀,不会产生冲突 5、缺点:需要知道关键字的分布,现实中不常用1.2数字分析法 1、原理:抽取关键字中的一部分来计算存储位置。假设关键字是以r为基(如:以10为基的十进制)
前面说到通过SSH2(SecureCRT)来远程登录和访问我们的虚拟机,其实还可以通过wondows自带的telnet服务远程登录linux。首先,要保证本机的telnet服务有开启,不然在dos命令时,是无法识别的。在“控制面板”-“程序和功能”-“打开或关闭Windows功能”-“Telnet客户端”打钩。之后要重启计算机才生效!第二,虚拟机中已经安装并开启telnet服务。
前面说到实现虚拟机和本机之间网络传输的方式除了使用ssh2协议以外,还可以使用ftp协议。具体做法:第一步 安装vsftpd服务器 -安装:rpm –ivh *.rpm -查询:rpm –q
实现本机与虚拟机之前的上传下载,除了用前面提到的挂载优盘,还可以使用共享文件夹。具体步骤如下: “虚拟机”-“设置”-“选项”-启用共享文件夹-添加本机路径。 然后,填写本机路径,和共享文件夹的名称。
在装了虚拟机之后,在网络连接对话框中会多出来两个虚拟网卡VMnet1和VMnet8。先简单说下虚拟设备:-VMnet0:用于虚拟桥接网络下的虚拟交换机-VMnet1:用于虚拟host-only网络下的虚拟交换机-VMnet8:用于虚拟NAT网络下的虚拟交换机-VMwareNetworkAdapterVMnet1:Host用于与host-only虚拟网络进行通信的虚拟网卡-VMwareNetwork
首先,要知道为什么优盘要挂载,什么叫挂载?在windows操作系统中,挂载通常是指给磁盘分区(包括被虚拟出来的磁盘分区)分配一个盘符。在linux操作系统中,挂载是指将一个设备(通常是存储设备)挂接到一个已存在的目录上。我们要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过访问这个目录来访问存储设备。简单来说,当优盘插上电脑的时候,虚拟机识别到有设备连接上了,这时,会分
1linux系统结构linux系统一般有这几个部分组成:内核Kernel、外壳Shell、文件系统和应用程序。层次结构如下图:其中:1.linux内核主要与计算机硬件进行交互,并为用户程序提供一个高级的执行环境,按功能模块分为:**进程调度、内存管理、文件管理、进程间通信、网络接口。**2.介于使用者和操作系统内核之间的接口Shell有以下功能:-读取输入和语法分析命令列-**重定向和管道**-搜
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号