- 博客(87)
- 收藏
- 关注
原创 Git,Ruby,githug下载
Ruby百度云链接:https://pan.baidu.com/s/1ADVhh0FtmJ9l_z-gm2udug 密码:kx06Git:https://www.newasp.net/soft/431610.html教程:https://www.cnblogs.com/smuxiaolei/p/7484678.html打开Ruby输入:gem install githuggithug 开始...
2019-07-23 18:51:53 337
原创 C语言之结构体内存对齐
结构体的内存对齐 --------首先得掌握结构体对齐规则: 1:第一个成员在结构体变量偏移量为0的地址处。 2:其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数=编译器默认的一个对齐数与该成员大小的较小值。 vs中默认的值为8 Linux中的默认值为4 3:结构体总大小为最大对齐数的整数倍。 4:如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处。那么为什...
2018-11-07 10:58:25 284
原创 C语言之大小端问题
大小端问题在我们发送数据的时候,我们首先要确定的是大端还是小端模式来进行的,接收方接收数据时必须知道数据传输的是大端机还是小端机,这个才能正确地读取和存储数据,否则就会出现问题。一个三十二位的二进制程序中存储有两种方式, 1:数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中(大端模式) 2:数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中(小端模式)#define...
2018-11-07 10:56:37 750
原创 合并两个有序链表(递归和非递归)
合并两个有序链表#include <stdio.h>#include <stdlib.h>typedef char linktype;typedef struct linklist{ linktype data; struct linklist *next;}linklist;void linklistinit(linklist **h...
2018-08-15 16:49:22 845
原创 单链表的逆置(递归和非递归)
单链表的递归和非递归逆置#include <stdio.h>#include <stdlib.h>typedef char linktype;typedef struct linklist{ linktype data; struct linklist *next;}linklist;void linklistinit(linklist **...
2018-08-15 09:47:19 4161 1
转载 使用VLC转码,在html5页面上播放实时监控
首先要获取摄像机品牌的RTSP地址:如大华的是 rtsp://user:pwd@ip:port/cam/ realmonitor?channel=1&subtype=0海康的是 rtsp://user:pwd@ip:port/MPEG-4/ch1/main/av_streamHtml5 并不支持rtsp,所以使用vlc进行转码,将rtsp转http流,这样就可以直接播放了...
2018-08-14 20:09:54 3479 2
原创 c语言复习总结
大小端问题在我们发送数据的时候,我们首先要确定的是大端还是小端模式来进行的,在接收方接收的数据必须知道数据是大端还是小端模式,这个才能正确地读取和存储数据,否则就会出现问题。 一个三十二位的二进制程序中存储有两种方式, 1:高字节对高地址(大端模式) 2:高字节对应低地址(小端模式) 区分大小端的方法 1:利用地址强制类型转换void test(){ int i =...
2018-07-27 15:53:54 629
原创 C++(五)类和对象的应用(日期类实现)
可以实现日期之间的加加,减减,大小比较等 直接看代码函数的声明#pragma once#include <iostream>using namespace std;class Date{public: Date(int year = 1900,int month = 1,int day = 1);//构造函数 Date(const Date&am...
2018-07-11 15:45:22 611 1
原创 C++(四)类和对象-默认的成员函数
隐含的this指针1.每个成员函数都有一个指针形参,它的名字是固定的,称为this指针,this指针是隐式的。 2.编译器会对成员函数进行处理,在对象调用成员函数的时候,对象地址作为实参传递给成员函数的第一个形参this指针。 3.this指针是成员函数隐含指针形参,是编译器自己处理的,我们不能在成员函数的形参中添加this的参数定义,也不能在调用时,显示传递对象的地址给this指针。...
2018-07-10 18:50:04 260
原创 C++(三)类和对象概念及定义
面向对象程序设计概念:是一种程序设计泛型,同时也是一种程序开发的方法。 对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性,灵活性,和扩展性。C++不是纯面向对象语言,而是基于面向对象语言,因为包含c语言三种访问限定符1:public成员可从类外部直接访问,private/protected成员不能从外部直接访问。 2:每个限定符在类...
2018-07-07 19:03:05 641
原创 C++(二)引用和指针
引用引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。 定义的格式是: 类型&引用变量名 = 已定义过得变量名;引用的特点: 1:一个变量可以取多个别名 2:引用必须初始化 3:引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。#include <iostream>using namespace std;void Testre...
2018-07-07 17:57:20 322
原创 C++(一)初识C++
C++发展历史语言的发展是一个逐步递进的过程,C++ 是直接从 C 语言发展过来的,而 C 语言是从 B 语言发展过来的,B 语言是 BCPL 的一个解释性后代,BCPL 是 Basic CPL。其中最有趣的是 CPL 中 C 的由来,由于当时这个语言是剑桥大学和伦敦大学合作开发的,在伦敦的人员加入之前,C 表示剑桥,伦敦人员加入之后,C 表示 Combined 组合。还有一种非正式的说法,C...
2018-07-07 15:20:06 522
原创 Linux(二十九)浅析数据链路层
用于两个设备(同一种数据链路节点)之间进行传递以太网*“以太网”不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。 *以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;以太网帧格式 *源地址和目的地址是指网卡的硬件地址也叫MAC地址,昌都市四十八为,是在网卡出厂时固化的; *帧协议类型字段有三种值分别对应IP...
2018-06-24 21:29:46 932 2
原创 Linux(二十八)浅析网络层协议(IP)
基本概念主机:配有IP地址,但是不进行路由控制的设备; 路由器:既配有IP地址,又能进行路由控制; 节点:主机和路由器的统称;协议头格式*四位版本号:指定IP协议的版本,对于IPv4来说,就是4。 *四位首部长度:IP头部的长度是多少个32bit,也就是length*4的字节数,4bit表示最大的数字是15,因此IP头部最大长度是六十字节。 *八位服务类型:三位有限权字...
2018-06-24 18:35:12 349
原创 Linux(二十七)TCP的粘包问题
TCP面向字节流创建一个TCP的socket,同时在内核中创建一个发送缓冲区和一个接收缓冲区; *调用write,数据会先写入发送缓冲区中; *如果发送的字节数太长,会被拆分成多个TCP的数据包发出; *如果发送的字节数太短,就会现在缓冲区里等着,等到缓冲区长度差不多了,或者其他合适的时机发送出去; 接收数据的时候,数据也是从网卡驱动程序到达内核的接收缓冲区; 然后应用程序可以调用r...
2018-06-23 14:48:41 1106 2
原创 Linux(二十六)TCP的高效性体现
TCP提高高效性的方法*滑动窗口 *快重传 *延迟应答 *捎带应答滑动窗口上一篇我们说了确认应答机制,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点就是性能较差,尤其是数据往返的时间较长的时候 既然这样一收一发的方式性能较低,那么我们一次发送多条数据,就可以大大的提高性能(其实是将多个段等待时间重叠在一起了)。*...
2018-06-23 13:58:48 470
原创 Linux(二十五)TCP的可靠性体现
TCP保证可靠性的方式*校验和 *序列号 *确认应答 *超时重发 *连接管理 *流量控制 *拥塞控制校验和TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证,其目的就是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动,如果接受方检测到校验和有差错,那么TCP段会被直接丢弃。 TCP校验和覆盖TCP首部和TCP数据确认应答(ACK)机制T...
2018-06-23 11:55:23 352
原创 Linux(二十四)TCP的三次握手与四次挥手
三次握手服务器在开始的时候,调用socket()函数分配一个文件描述符,然后是填充本地sockaddr_in结构体信息,绑定分配的文件描述符和服务器地址端口,下面就开始建立监听描述符,调用listen函数,使刚才的文件描述符成为一个监听描述符, 然后就是阻塞等待客户端连接; 客户端做的工作就是分配一个文件描述符,填充sockaddr_in信息,然后调用connect函数向服务器发起连接...
2018-06-22 14:23:20 257
原创 Linux(二十三)浅析传输层协议(UDP,TCP)
传输层 负责数据能够从发送端传输接收端端口号 端口号标识了一个主机上进行通信的不同的应用程序在TCP/IP协议中,用“源IP”,“源端口号”,“目标IP”,“目标端口号”,“协议号”这样一个五元组来表示一个通信 (可以通过netstat -n查看)cat /etc/services查看知名端口号,我们在写一个程序使用端口号时,要避开这些知名端口号一个进程可以绑定多个端口号...
2018-06-22 10:31:32 429
原创 Linux(二十二)浅析应用层协议HTTP
HTTP协议格式HTTP请求 ·首行:【方法】+【url】+【版本】 ·Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束 ·Body:空行后面的内容都是Body,Body允许为空字符串。如果Body存在,则在Header中会有一个Conten-Length属性来表示Body的长度;HTTP响应 ·首行:【版本号】+【状态...
2018-06-21 16:01:15 309
原创 Linux(二十一)编写TCP服务器(多线程版本)
server.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <pthread.h>#include <sys/socket.h>#include <netinet/in.h>
2018-06-06 16:15:17 280
原创 Linux(二十)编写简单的TCP服务器(多进程版本)
上一篇我们讲的TCP服务器的简单实现是只有一个进程连接的情况,但是实际上,这是不现实的,所以我们要改进我们的程序,使其可以服务于多个进程 直接上代码server.c#include &amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;lt;sys/socket.h&amp;amp;amp;amp;gt;#include &
2018-06-02 10:18:07 478
原创 Linux(十九)网络基础:编写简单的TCP服务器
首先我们来说用到的函数socket#include <sys/types.h>#include <sys/socket.h>int socket(int domain,int type,int protocol);*socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符; *应用程序可以像读写文件一样用read...
2018-05-31 14:11:37 5225 1
原创 Linux(十八)网络基础:深入认识UDP(编写UDP服务器)
UDP协议端格式 16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度; 如果校验和出错,就会直接丢弃UDP特点UDP传输的过程类似于寄信 *无连接:知道对短的IP和端口号就可以直接进行传输,不需要建立连接; *不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息; *面向数据报:不能够灵活的控...
2018-05-30 11:38:39 698
原创 Linux(十七)网络基础:网络编程套接字
理解源IP地址和目的IP地址在IP数据包头部中,有两个IP地址,分别叫做源IP地址,和目的IP地址认识端口号端口号是传输层协议的内容 端口号是一个2字节十六位的整数 端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理; IP地址+端口号能被标识网络上的某一台主机的某一个进程 一个端口号只能被一个进程占用 一个进程可以绑定多个端口号,但是一个端口号不...
2018-05-29 16:33:18 218
原创 Linux(十六)网络基础:网络初识
网络协议初识协议分层: OSL七层模型 * OSL七层网络模型称为开放式系统互连参考模型,是一个逻辑上的定义和规范 * 把网络从逻辑上分为了七层,每一层都有相关,相对应的物理设备,比如路由器,交换机。 * OSL七层模型是一种框架性的设计方法,其最主要功能就是帮助不同类型的主机实现数据传输; * 它的最大优点是将服务,接口和协议这三个盖面明确的区分开来,概念清楚,理论也就比较完整,通...
2018-05-29 14:18:41 463
原创 数据结构之动态通讯录的实现
动态通讯录包括了动态申请内存, **插入联系人; 删除联系人; 查找联系人; 排序联系人; 清空联系人; 修改联系人; 显示所有联系人;**下面来看代码 首先,我们要做好我们的准备工作 **adress.h**#pragma once#include &amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;amp;
2018-05-28 11:50:59 2693 2
原创 数据结构之堆的基本操作
堆说的堆,我们就知道有两种堆的方式 小堆(大堆)中:任意一个关键码均小于(大于)等于它的左右孩子的关键码,位于堆顶节点的关键码最小(最大),从根节点到每个节点的路径上手族元素组成的序列都是递增(递减)的堆存储在下标为0开始的数组中,因此在堆中给定下标为i的节点时如果i=0,节点i是根节点,没有双亲节点;否则节点i的双亲节点为(i-1)/2 如果2*i+1 &amp;lt;= n-1,则...
2018-05-27 00:16:11 521
原创 数据结构之二叉搜索树的基本操作
二叉查找树(Binary Search Tree)二叉搜索树(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树那么对一个二叉搜索树的操作就有: 初始化 销毁 插入 删除 查找 searchtr...
2018-05-24 15:47:29 330
原创 C语言之模拟实现strncopy,strncat,strncmp
模拟实现strncopy#include <stdio.h>#include <string.h>#include <stdlib.h>char *mystrncopy(char *dest,const char *src,int n){ char *ret = dest; while(n--) { *des...
2018-05-23 17:25:31 698
原创 数据结构之哈希扩展——布隆过滤器
背景:在日常生活中,包括在设计计算机软件时,我们要经常判断一个字符串是否在一个集合中,一个英语单词是否拼写正确。最直接的办法就是将集合中的所有元素都存在计算机中,遇到一个新元素,将它和集合中的元素直接比较即可。一般来讲计算机中的集合是用哈希表来存储的,它的好处就是快速准确,缺点是费存储空间。以空间换时间。我们只需要看看所查的点是不是1就可以知道集合里面有没有它了。 但是因为哈希冲突的问题,所以我...
2018-05-23 14:29:50 366
原创 数据结构之哈希变形——位图
背景:海量数据处理 笔试题:给四十亿不重复的无符号,整形,没排过序。给一个无符号整数,如何快速判断一个数是否在这四十亿个数中在这里我们就可以用到我们的哈希思想。 位图:我们只需要表示这个数字存不存在的话,只需要一个比特位即可,所以我们用一个数组来装元素的个数,每个元素都有八个比特位,那么就可以表示八个数字【(用uint64_t的话),因为uint64_t不论在多少位机子下都是八字节】 这...
2018-05-23 11:51:06 275
原创 数据结构之哈希冲突解决方法(链地址法)
上一篇我们了解了哈希表与哈希冲突的基本概念,并且展示了一种哈希冲突的解决方法,今天我们来了解第二种哈希冲突的解决方法 开散列法,又叫链地址法 开散列法:首先对关键码集合用散列函数计算出散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个无头结点的单链表连接起来,各链表的头结点存储在哈希表中,也就相当于,此时存储各个头结点的这个数组,是一个指针数组,这个数...
2018-05-21 17:54:13 2864 2
原创 数据结构之哈希冲突解决方法(开放地址法)
首先我们来了解一下什么叫做哈希表 在顺序搜序偶以及二叉搜索树种,元素存储位置和元素个关键码之间没有对应关系,因此在查找一个元素时,必须要经过关键码的多次比较。 而我们理想的搜索方法:可以不经过任何比较,一次直接可以从表中得到想要的元素当向一个结构中 *插入元素时:根据待插入元素的关键码,以此桉树计算出钙元素的存储位置,并按该位置存放 *搜索元素时,根据元素的关键码进行同样的计算,把求得...
2018-05-21 17:44:22 1341
原创 Linux(十五)进程间关系和守护进程
进程组/作业/会话1.进程组 每个进程除了进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,他们与一个作业相关联,可以接受来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要某个进程组中一个进程存在,则该进程组就存在,这与其组长进程...
2018-05-21 17:07:47 195
原创 Linux 浅析线程死锁
所谓的线程死锁就是指多个线程因为竞争资源而造成的一种僵局,一个线程不停的申请锁,释放锁,从而不给另外的线程,获得资源的机会,这就是死锁问题。若没有外力的作用,那么这些线程偶会卡到这里无法推进。产生死锁的必要条件:1:互斥条件:进程要求对分配的资源进行排他性控制,即在一段时间内某资源仅为一个进程所占有,此时若有其他进程请求该资源,则请求进程只能等待 2:不剥夺条件:进程所获得资源在未使用完...
2018-05-18 16:07:23 414
原创 Linux(十四)线程控制(gdb调试多线程程序)
GDB默认支持调试多线程,跟主线程 查询线程:info threads 切换调试线程: thread +线程编号 测试函数#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <pthread.h>v...
2018-05-17 17:28:22 519
原创 Linux(十三)线程(信号量与生产者与消费者模型)
在前面的进程控制里面我们说到了System V版本的信号量,主要用于进程控制。同样,线程控制里面也有相应的信号量,它用于线程间同步,就是我们下面要讲的Posix信号量 说到信号量,我们都明白,信号量就相当于一个计数器,它的目的是为了保护临界资源,通过信号量的P,V操作,就可以对临界资源的数目进行修改POSIX信号量 初始化信号量#include<semaphore.h>...
2018-05-17 16:57:35 1225
原创 数据结构之迷宫最短路径求解
上一篇我们讲了求解迷宫是否有出路的问题,这篇我们在迷宫有多条路的情况下怎么求出最短路径 我们的思路是建立两个栈,一个当前路径栈,一个最短路径栈,最开始的时候最短路径栈是空,我们把一条迷宫路径的所有节点都入栈,然后与最短路经比较,如果小于那么,就将当前路径的栈赋值给最短路径栈,其中包括重新申请大小等。 下面是具体代码实现#include "maze.h"#include "seqsta...
2018-05-17 01:09:54 3532 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人