- 博客(46)
- 收藏
- 关注
原创 ffmpeg安装
https://blog.csdn.net/evsqiezi/article/details/52396986 安装http://blog.sina.com.cn/s/blog_61bc01360102w815.html 安装出错解决https://www.cnblogs.com/wainiwann/p/4204230.html 编译命令详解https:/...
2019-01-03 17:17:16
514
原创 写一个函数判断机子大小端的问题
小端机就是存放数据时, 数据的低位存在低地址,高位存在高地址 大端机就是存放数据时, 数据的低位存在高地址,高位存在低地址 代码如下:#include<stdio.h>#include<stdlib.h>void port(){ int a = 1; int b = (char)a; if(b == 1) printf("小端\n");/
2017-07-23 16:28:13
861
原创 请写一个带参数的宏来求两个数中的最大值。
请写一个带参数的宏来求两个数中的最大值。 求两个数中的最大值必定要返回一个值,可以直接写成表达式的形式。如下:#define MAX(x,y) (x)>(y)?(x):(y) 但是这句代码有点问题,像下面这样调用:#include#include#define MAX(x, y) (x) > (y) ? (x) : (y)int fun(
2017-07-23 15:37:13
1623
原创 斐波那契数列
考点:注意返回值为 long long 型,高效率1 递归缺点:耗费时间,为什么耗费时间?要重复计算一个值多次,并且多次调用函数需要 开辟自己的栈帧空间时间复杂度:O(fib(n))空间复杂度:O(n)longlong fib(intn){ if(n 0) return0; if(n
2017-07-19 21:18:18
220
原创 多进程、多线程服务器
本篇博客将介绍基于IPv4的socket网络编程。 一、socket1.概念: socket这个词可以表示很多概念:在TCP/IP协议中,“IP地址 + TCP或UDP端口号”唯一标识网络通信中的一个进程,“IP地址 + 端口号”就叫做socket。 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个一个连接,soc
2017-07-05 17:10:38
885
原创 TCP三次握手与四次挥手
一、TCP三次握手 所谓三次握手,就是在建立TCP连接时,需要客户端和服务端一共发送三个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息。在socket编程中,客户端执行connect( )时。将触发三次握手。如下图:建立连接的过程: 1.第一次握手 客户端发出请求,SYN位表示连接请求。序号是1000,这个序号在网
2017-07-02 00:37:59
359
原创 URG与PSH
一、URG URG(紧急位): 急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。T C P的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据,不进入接收缓冲就直接交给上层进程,余下的数据要进入接收缓冲的)二、PSH PSH(急迫位): 在一个交互程序中,当客户发送一个命令给服务器时,它设置
2017-07-01 01:31:17
501
原创 常见的路由表生成算法
一、路由表 所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。 在计算机网络中,路由表或称路由择域信息库(RIB)是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主
2017-06-30 08:13:24
1887
原创 NAT与代理服务器
一、NAT技术 1.概念 NAT,即Networ Address Translation,可译为网络地址转换或网络地址翻译。 当前的Internet面临两大问题,即可用IP地址的短缺和路由表的不断增大,这使得众多用户的接入出现困难。 使用NAT技术可以使一个机构内的所有用户通过有限的数个(或1个)合法IP地址访问Internet,从而节省了Internet上的合法IP地址;另一方面
2017-06-29 20:48:27
801
原创 ARP协议【地址解析协议】
一、概念 ARP协议,即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。 地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP
2017-06-28 22:27:47
1045
原创 CRC校验(循环冗余校验码)
一、概念: CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。二、工作原理: 循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这
2017-06-21 14:23:53
2848
1
原创 网络端口分类
1.端口简介 随着电脑网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题。TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在TCP/IP协议中引入了一种称之为”Socket(套接字)”应用程序接口。有了这样一种接口技术,一台电脑就
2017-06-19 09:22:41
731
原创 创建守护进程
守护进程也称精灵进程,是运行在后他的一种特殊进程。它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。守护进程是一种很有的进程,linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond等。 linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直
2017-06-16 17:21:57
261
原创 死锁问题?
1. 什么是死锁? 如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么改组进程就是死锁的。 也就是说,在一组进程发生死锁的情况下,这组死锁进程中的每一个进程,都在等待另一个死锁进程所占有的资源,或者说每个进程所等待的事件是该组中其他进程释放所占有的资源。但由于所有这些进程都已无法运行,因此它们谁也不能释放资源,致使没有任何一个可以被唤醒。这样这组进程只能无限期待的等下
2017-06-08 13:54:36
307
原创 利用core文件对多线程和多进程进行调试
1.core文件的简单介绍 在一个程序崩溃时,他一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映像(同时加上调试信息),只是用来调试的。2.开启或关闭core文件的生成 先使用ulimit -l 查看core文件是否可以生成。 我们发现可创建core文件的大小为0 kb。 ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创
2017-06-03 22:10:39
1028
原创 文件描述符与文件指针
首先看下下面函数:FILE* fopen(const char* path, const char* mode) 我们看它的返回值,当文件顺利打开后,指向该流的文件指针就会被返回,也就是说这个函数返回值为 FILE* 类型(文件指针类型)。再看另一个函数:int open(const char* pathname, int flags)int open(const char* pathnam
2017-05-11 00:36:31
357
原创 atexit函数解析
进程终止的方式有8种,如下所列出,其中前5种是正常的终止,后三种是异常的终止: 1.从main函数返回 2.调用exit函数 3.调用_exit函数或者_EXIT函数 4.最后一个线程从启动历程返回 5.最后一个线程调用pthread_exit 6.调用abort函数 7.接到一个信号并终止 8.最后一个线程对取消请求做出响应exit(
2017-05-06 00:10:03
329
原创 Linux 进程描述符task_struct详解
在linux中每一个进程都有 tast_struct数据结构来定义。test_struct就是我们通常所说的PCB。他是对进程控制的唯一手段也是最有效的手段。当我们调用fork()时,系统会为我们产生一个tast_struct结构。然后从父进程那里继承一些数据,并把新的进程插入到进程树中以待进行进程管理。因此了解task_struct的结构对于我们理解进程调度的关键。在进行剖析task_struct
2017-04-12 21:20:44
676
原创 Linux下的指令:pwd指令
在linux操作系统中,如果想要确认当前所处的目录,可以用pwd命令,该命令显示整个路径名。 命令格式: $ pwd [选项]命令功能: pwd命令将当前目录的全路径名称写入标准输出。命令选项: -P:显示当前目录的绝对路径名。但不包含在绝对路径中涉及到的符号链接类型的文件的名称。 -L:显示路径名不包含 . 或 .. 。
2017-03-30 16:08:47
658
原创 文件粘滞位(粘着位)的作用
1.什么是粘滞位? 如图: 图中红线位置的 t 就是粘滞位。也叫粘着位。2.为什么产生粘滞位? 在linux下他有一个/tmp目录,它用来存放每个用户所创建的临时文件。也就是说每个用户都对这个/tmp目录有一个 写 的权限。那么,如果一个用户在/tmp下创建了一个文件,而这个文件却被另一位用户删了。那这样就出现了一个很大的安全问题,而粘滞位就很容易解决这个问题。3.粘滞位的
2017-03-28 17:35:54
1526
原创 Linux下的指令:ls 指令
ls指令ls命令是linux下最常用的命令之一。用来打印指定目录下的文件名。(ls就是list的缩写),ls不仅可以查看目录下的文件,而且可以查看文件的权限、信息等。1.命令格式 ls [选项] [目录名]2.命令功能 列出目标目录下的所有子目录及文件。3.常用命令 1. ls 只写命令ls, 表示显示当前目录下的子目录以及文件,不包括隐含文件。 2. ls [目录]
2017-03-28 16:09:23
882
原创 Linux下的指令: 查找指令:find
Linux下find命令在目录结构中搜索文件,并执行指定的操作。 1. Linux下find命令格式: $ find pathname -options [-print -exec -ok …]2. 命令功能: 用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)。3. 命令参数: pathname**:find命令所查找的目录路径(也就是要在哪个目录下查找)。例如用 .**
2017-03-27 11:17:39
764
原创 Linux 下进入一个目录所需要的权限
在Linux下,想进入一个目录,就必须获有一定的权限。比如现在有一个come目录,我们在这个目录下创建一个dir目录,然后将dir这个目录的所有权限取消掉。 如图: 1.创建目录 2. 取消所有权限 3.此时我们进入这个dir目录,发现进不去,提示是没有权限 4.然后我们开始逐次添加权限 我们通过上面的几组图片可以看出,当有(x)权限的时候就可以进入该目录了。 下面我们
2017-03-22 22:06:55
847
1
原创 STL中map,set的使用
Map: 1.定义: Map是标准关联式容器之一,一个map是一个键值对序列,即(key ,value)对。它提供基于key的快速检索能力,在一个map中key值是唯一的。2.Map常用的方法主要有:insert,erase,size,count,begin,end,find,clear,empty。insert方法:在map中插入一个元素,map中记录的元素通常为键值对,所以,在存储时会把,键
2017-02-15 23:27:18
461
3
原创 停车场模拟管理问题
问题描述 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列,(大门在最南端,最先到达的第一辆车放在车场的最北端)。若停车场内已经停满n辆车,那么后来的车只能在门外的便道上等候。一旦有车开走,则排在便道上的第一辆车即可开入。当停车场内某车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该车开出大门外,其他车辆再按原次序进
2016-12-17 23:12:45
2964
2
原创 用循环和递归处理迷宫问题
1. 用循环解决迷宫问题 先看下图的迷宫 这里的1代表墙,0代表通道。(只解决简单的迷宫是否有出口问题或者输出一条路径) 首先我们需要接收这样一个迷宫,那就定义一个二维数组来保存它。#define N 10int maze[N][N];void GetMaze(int *arr, int n){ FILE *f = fopen("test.txt","r");//test.t
2016-12-01 17:31:19
768
原创 模拟实现 队列
先介绍一下队列: 队列(queue)在计算机科学中,是一种先进先出的线性表。 它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 由于队列在队头进行删除,队尾进行插入,所以用链表进行实现就比较方便。 队列采用的FIFO(first in first
2016-11-29 23:22:49
286
原创 模拟实现 栈
栈:只允许在栈顶进行删除和插入操作的顺序表。(FILO,先进后出) 如下图: 在栈里面有以下几项基本操作: pop()//删除栈顶数据 push(data)//在栈顶插入一个数据data top()//返回栈顶元素 size()//返回栈中元素的个数 empty()//判断栈是否为空下面进行代码实现:#include<iostream>using namespace std;te
2016-11-28 22:35:29
244
原创 继承与派生
所谓继承就是从先辈处得到属性和行为特征。专业的说就是在已有类的基础上创建新的类,新类可以从一个或多个已有类中继承成员函数和数据成员,而且重新定义或加进新的数据和函数,从而引成类的层次或等级。其中,已有类称为基类或父类,在他基础上建立的类称为派生类或子类。 上图是简单的学生分类图 下面通过一个例子说明为什么要使用继承。 现在有一个学生类 Student, 它含有 number, name,
2016-11-28 21:19:32
347
原创 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
假设这是一个整形数组,只需定义一个第三变量进行交换即可。 代码如下:#include<stdio.h>#include<stdlib.h>void print(int arr[], int sz)//输出数组元素{ int i = 0; for(i=0; i<sz; i++) { printf("%d ",arr[i]); } prin
2016-08-23 11:40:34
308
原创 写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int val
写一个函数返回参数二进制中 1 的个数 比如:15 二进制为: 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int value) { // 返回 1的位数 }如果让我们求一个十进制数中1 的个数,我们会将这个数除以10之后看余数是不是1,然后将得到的商除以10看余数是不是1,依次类推,直到商为0. 如下图解释
2016-08-20 23:49:13
1051
原创 求10 个整数中最大值
求10 个整数中最大值,首先定义一个变量max,保存最大值。起初我们先认为第一个数为最大值,将第一个数付给max,然后用max与第二个数比较,如果第二个数比当前的max大,那就把第二个数认为是最大的数付给max,再用max与第三个数比较,依次类推,便可以得到最大的数。#include<stdio.h>#include<stdlib.h>int main(){ int i = 0;
2016-08-18 17:42:32
611
原创 计算1000年~2000年之间的闰年
计算1000年~2000年之间的闰年: 闰年: ①、普通年能整除4且不能整除100的为闰年。(如2004年就是闰年)②、世纪年能整除400的是闰年。(如2000年是闰年,1900年不是闰年)写个for循环然后判断就行了,count是计数,看1000-2000年之间有多少个闰年。#include<stdio.h>int main(){ int i = 0; int count
2016-08-14 15:56:40
2747
原创 打印乘法口诀表
打印乘法口诀表用两个for循环(嵌套)就可以解决了 外层循环控制行,内层循环控制列。 代码如下:#include<stdio.h>#include<stdlib.h>int main(){ int i = 0; int j = 0; for(i=1; i<10; i++) { for(j=1; j<=i; j++) {
2016-08-14 12:02:24
272
原创 打印100~200 之间的素数
素数:素数又称质数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。 解题思路:首先将100-200之间的数依次拿出来,除以比它小的数(1和它本身除外),若余数都不为0,则此数为素数。 下面为主要程序代码://文中count的作用:如果所得到的余数有为0的;就将count置为1,如果所有的余数都不为0;那么c
2016-08-13 12:21:19
1922
原创 实现c语言注释转换为c++注释
次篇文章将实现 c语言注释转换为c++注释例如,将下面的c语言注释转换为c++注释// 1.一般情况/* int i = 0; */// 2.换行问题/* int i = 0; */int j = 0;/* int i = 0; */int j = 0;// 3.匹配问题/*int i = 0;/*xxxxx*/// 4.多行注释问题/*int i=0;int j = 0;int
2016-08-11 12:28:50
511
原创 通讯录动态版(动态内存开辟)
实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人#define _CRT_SECURE_NO_WARNINGS 1#inclu
2016-08-07 16:05:05
294
原创 模拟实现strrstr
模拟实现strrstr#include#include#include#includechar *my_strstr(const char *dest, const char *src)//查找子字符串的函数{ char *p = NULL; char *q = (char*)src; assert(dest); assert(src); while(*dest) {
2016-08-06 16:13:43
296
原创 模拟实现strcpy 模拟实现strncpy 模拟实现strcat 模拟实现strncat 模拟实现strcmp 模拟实现strncmp 模拟实现memcpy 模拟实现memmove
//模拟实现strcpy#include#include#includevoid my_strcpy(char *dest, const char *src){ assert(src); while(*dest++ = *src++) ;}int main(){ char arr1[20] = {0}; char arr2[] = "abcdef"; my_strcp
2016-07-30 14:25:26
475
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人