自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 互斥锁与信号量的区别

“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信

2016-12-17 21:50:47 883 1

原创 strstr()函数

字符串函数strstr(char *s1,char *s2)是返回字符串s1中首次出现s2的地址函数实现:[cpp] view plain copy char *my_strstr( char *s1, char *s2)  {      if(*s2 == '\0')      {             retur

2016-12-14 23:11:59 347

原创 实现蛇形输出

实现如下的蛇形输出:1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9 具体代码实现:[html] view plain copy  #include stdio.h>  #inclu

2016-12-13 21:51:07 493

转载 函数中返回字符串的方法

有四种方式:1。使用堆空间,返回申请的堆地址,注意释放2。函数参数传递指针,返回该指针3。返回函数内定义的静态变量(共享)4。返回全局变量 ******************以下摘自csdn****************************** 其实就是要返回一个有效的指针,尾部变量退出后就无效了。 使用分配的内存,地

2016-12-12 22:46:25 685

转载 拓扑排序

转载http://www.cnblogs.com/dolphin0520/archive/2011/04/16/2017737.html 概述 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(T

2016-12-11 23:15:43 332

原创 TCP三次握手与四次挥手的全过程

三次握手:第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到syn包,必须确认客户的syn(syn=x+1),同时自己也发送一个syn包(syn=y),即syn+ack包,此时服务器进入SUN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此时包发送完毕,客

2016-12-10 17:31:52 549

原创 进程与线程

首先来一句概括的总论:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。下面细说背景:CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个

2016-12-09 23:37:38 282

原创 机器大小端的检测

// 解释一下就是将  0x11223344 看作字符串 “0x11223344\0”;尾端:44;               // 高端就是 “11 22 33 44” 进行存储;(大端)                        地址      0    1   2   3                                     低地址--->高地

2016-12-07 22:07:50 374

原创 五类IP地址范围及作用

P地址分为A,B,C,D,E五类。网络号:用于识别主机所在的网络; 主机号:用于识别该网络中的主机。其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用。这三种是主要的。IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。其中A类、B类、和C类这三类地址

2016-12-06 23:02:48 676

原创 IO多路转接

[objc] view plain copy print?#include   #include   #include   #include   #include   #include   #include   #include   #include  #include  #include    /* 宏定义端口号 *

2016-12-05 22:33:25 365

原创 使用scanf常见问题

scanf函数我曾经在这个函数上犯过不少错误,也看到别人犯过的错误,记下来,提醒自己不要重蹈覆辙了。如果对你有用,那就更好了:)如果你发现文章中有错误,欢迎你不吝赐 教。希望和大家一起学习!曾经错的几个地方:(xpsp2,vc6.0环境下)1.空白符问题[cpp] view plain copy#include

2016-12-04 22:22:07 609

原创 IIC常遇问题

面试的时候主要会遇到的IIC问题如下介绍一下你了解的I2C?I2C总线是飞利浦(PHLIPS)公司推出的一种串行总线,用于连接微控制器及其外围设备, I2C串行总线有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 它仅通过两根信号线就可以完成对所有挂载在I2C总线上的从器件进行操作。这样的好处是可以大大的节省我们微处理器的IO口资源。I2C到底可以挂载多少个器件

2016-12-03 23:28:43 4117

原创 进程通信的几种方式及其各自优缺点

linux上面的IPC大多都是从UNIX上面继承而来。 最初Unix IPC包括:管道、FIFO、信号。System V IPC包括:System V消息队列、System V信号灯、System V共享内存区。由于Unix版本的多样性,电子电气工程协会(IEEE)开发了一个独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。现有大部分Uni

2016-12-01 22:34:21 3766

原创 C语言的宏定义和C++的内联函数有什么意义

宏是预编译器的输入,然后宏展开之后的结果会送去编译器做语法分析。宏与函数等处于不同的级别,操作不同的实体。宏操作的是 token, 可以进行 token的替换和连接等操作,在语法分析之前起作用。而函数是语言中的概念,会在语法树中创建对应的实体,内联只是函数的一个属性。对于问题:有了函数要它们何用?答案是:一:函数并不能完全替代宏,有些宏可以在当前作用域生成一些变量,函数做不到。二:内联函数只是

2016-11-30 23:18:02 451

原创 链表中基数排序

于两两比较的算法,算法的运行下界为Ω(nlogN),如果想再降低时间复杂度,只能通过其他的非基于比较的方法。基数排序就是一种方法,其时间复杂度为O(N)基数排序的过程,假设有4个数,我们用链表把他们连一起,这4个数为321  892   538  439第一步:我们先创建10个链表,L0~L9,然后按4个数的个位的数字,依次接到相应链表的后面L0 

2016-11-29 21:52:43 1929

转载 TCP中的三次握手

说到TCP协议,相信大家都比较熟悉了,对于TCP协议总能说个一二三来,但是TCP协议又是一个非常复杂的协议,其中有不少细节点让人头疼。本文就是来说说这些头疼点的,浅谈一些TCP的疑难杂症。那么从哪说起呢?当然是从三次握手和四次挥手说起啦,可能大家都知道TCP是三次交互完成连接的建立,四次交互来断开一个连接,那为什么是三次握手和四次挥手呢?反过来不行吗?疑症一:TCP的三次握手、四次挥手

2016-11-27 22:54:08 2967 1

转载 C语言中,malloc和free深入理解

在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用—— 就是malloc然后free就一切OK了。当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结。这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助

2016-11-26 20:59:43 414

转载 多线程的聊天室实现-服务器端

服务器端的主要功能: 实现多用户群体聊天功能(此程序最多设定为10人,可进行更改),每个人所发送的消息其他用户均可以收到。用户可以随意的加入或退出(推出以字符串“bye”实现),服务器也可以进行关闭。 服务器端的程序结构: 总共有三个函数:主函数(main),实现服务器端的初始化,接受连接;消息处理函数(rcv_snd),接受某一用户的消息,将其进行简单处理之后发送给其他所有的用户;退

2016-11-25 23:29:27 449

原创 条件编译

这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。    条件编译命令最常见的形式为:    #ifdef 标识符    程序段1    #else    程序段2   

2016-11-24 22:10:51 340

原创 动态链表和静态链表的区别

静态链表是用数组实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配大小。动态链表是用申请内存函数(C是malloc,C++是new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地址不连续,要通过指针来顺序访问。*所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。*/struct Student

2016-11-23 22:29:24 618

原创 linux中获得当前目录的方法

两种方法:1. 利用getcwd()函数取得当前工作目录(相当于windows下的GetCurrentDirectory)2. 取得实际文件目录(相当于windows下的GetModuleFileName())原理:每个进程在/proc下都有一个以进程号命名的目录。在该目录下有exe文件,该文件是一个链接文件,它指向的路径就是该进程的全路径.用readlink()读

2016-11-22 22:40:42 1141

原创 linux中静态链接的空间和地址分配

多个文件链接在一起的时候,会做到相似段合并,数据段在一起,代码段在一起。 这样能节省空间,对于x86的硬件来说段的装载地址和空间的对齐单位是页,是4096个字节,如果一个个段分开存放,会造成大量的内部碎片。链接器为目标文件分配空间和地址: 【1】输出的可执行文件的空间 【2】装载后的虚拟地址的虚拟地址空间a.c#include extern int shared;

2016-11-21 22:27:04 288

原创 常用汇编指令

1、 MOV(传送) 指令写法:MOV target,source 功能描述:将源操作数source的值复制到target中去,source值不变 注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。2)target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送

2016-11-20 23:19:43 624

原创 字节,半字,字对齐方式详解

一、字节对齐基本概念    现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存

2016-11-18 23:04:42 5101

原创 常用汇编指令

1、 MOV(传送) 指令写法:MOV target,source 功能描述:将源操作数source的值复制到target中去,source值不变 注意事项:1)target不能是CS(代码段寄存器),我的理解是代码段不可写,只可读,所以相应这地方也不能对CS执行复制操作。2)target和source不能同时为内存数、段寄存器(CS\DS\ES\SS\FS\GS)3)不能将立即数传送

2016-11-17 22:35:07 1197

转载 链表找环方法注解

编程判断两个链表是否相交,原题假设两个链表不带环。  问题本身的解答并不是本文的重点。用指针p1、p2分别指向两个链表头,不断后移;最后到达各自表尾时,若p1==p2,那么两个链表必相交  扩展问题1:如果链表可能有环,上面的方法怎么调整?分情况讨论:如果两个链表都没有环,那么同原算法;如果两个链表一个有环,一个没环,那么必然不相交。(*)如果两个链表都有环

2016-11-16 22:23:55 294

原创 fgets与gets的区别

1.fgets函数 功能:用于从文件中读取一字符串 函数原型char *fgets(char *buf, int bufsize, FILE *stream);11参数 *buf: 字符型指针,指向用来存储所得数据的地址。 bufsize: 整型数据,指明存储数据的大小。 *stream: 文件结构体指针,将要读取的文件流。 返回值: 操作成功,返回的是ms

2016-11-15 22:28:43 394

原创 TCP/UDP的套接字操作

一、TCP的网络编程操作1、TCP服务器编程步骤:①. 创建一个socket,用函数socket()②. 绑定IP地址、端口等信息到socket上,用函数bind()③.设置允许的最大连接数,用函数listen()④.接收客户端上来的连接,用函数accept()⑤.收发数据,用函数send()和recv(),或者read()和write()⑥.关闭网络连接

2016-11-14 21:20:01 481

原创 UDP实现服务器与客户端通信

1、UDP服务器#include#include#include#include#include#include#define PORT 2048int main(){    int sockfd;    struct sockaddr_in serv_addr;    struct sockaddr_in cli_addr;   

2016-11-13 22:45:41 356

转载 七种排序方法

一、快速排序1. 简单介绍  快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少

2016-11-10 22:15:30 216

原创 数据的多段存储

举例说明8086如何用多个段存储数据:  说明: ①定义多个段和我们以前讲的定义代码段一样,只是段名不同而已。 ②程序中有多个段如何访问这些数据呢,以及如何知道这些数据时代码段还是数据段或者堆栈段呢,段名就相当于一个表号,它代表段地址,所以就通过mov ax,data(标号),然后将这个ax传给ds,那就是数据段,传给ss,那就是堆栈段。 ③我们只是要一段空间,你把这个

2016-11-10 00:06:34 256

转载 TCP/IP相关函数

TCP网络通信TCP编程模型 TCP/IP协议族TCP/IP 实际上一个协同工作的通信家族,为网络数据通信提供通路。为讨论方便可TCP/IP 协议组大体上分为三部分:1、Internet 协议(IP)2、传输控制协议(TCP)和用户数据报协议(UDP)3、处于 TCP 和 UDP 之上的一组应用协议。它们包括:TELNET,文件传送协议(FT

2016-11-08 22:56:33 3254

原创 linux中的服务器函数

1、  socket函数的作用:建立一个新的socket套接字函数的原型:int socket(int domain,int type, int protocol)函数的参数:domian:表示使用何种地址类型                   AF_INET,IPV4网络协议                   AF_INET6,IPV6网络协议

2016-11-08 00:14:24 323

原创 linux中的数据校验方法

1.什么是数据校验 通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。2.最简单的检验 实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。同时也是效率最低的。适用范围:简单的数据量极小的通讯。3.奇偶校

2016-11-06 22:11:03 2933

原创 SPI协议工作原理

一、概述.     SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控制器(PICmicro) 上面的微处理控制单元 (MCU) 上叫作同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MC

2016-11-05 23:15:11 451

原创 linux中线程的同步与互斥

1.互斥锁的定义互斥锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源。从本质上讲,互斥量是一把锁,该锁保护一个或者一些资源。一个线程如果需要访问该资源,必须要获得互斥量对其加锁。这时,如果其他线程想访问该资源也必须要获得该互斥量,但是锁已经加锁,所以这些进程只能阻塞,直到获得该锁的进程解锁。这时阻塞的线程里面有一个线程获得该互斥量并加锁,获准访问该资源,其他进程继续阻

2016-11-04 23:54:42 234

原创 数据库的相关函数

数据库1、  Sqlite3_open函数的作用:打开一个数据库函数的原型:int sqlite_open(const char *dbname, sqlite **db)函数的参数:dbname:数据库的名称           db:数据库的句柄返回值:操作成功:SQLITE_OK;头文件:#include  2、  sq

2016-11-03 22:57:01 323

原创 线程中的一些基本函数

Linux多线程一、线程的特点1. 线程是进程的一个执行流,是CPU调度和分配的基本单位。线程是程序运行的最小单位。2. 线程不会影响到其它线程的运行。比如一个线程崩溃,其它线程正常运行。3. 同一进程内的线程共享进程的地址空间。二、一个线程的组成1. 一个指向当前被执行指令的指令指针2. 一个栈空间3. 一个寄存器值的集合4

2016-11-01 22:13:04 351

原创 进程与线程的区别

进程与线程的区别进程: 1.进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元; 2.进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。 3.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 4.每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间,

2016-10-31 22:44:14 257

原创 linux 中内存管理

简介    内存是计算机中最重要的资源之一,通常情况下,物理内存无法容纳下所有的进程。虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所以无论物理内存如何增长,都赶不上程序增长的速度,所以操作系统如何有效的管理内存便显得尤为重要。本文讲述操作系统对于内存的管理的过去和现在,以及一些页替换的算法的介绍。 对于进程的简单介绍    在开始之前,首先从

2016-10-30 22:27:25 300

空空如也

空空如也

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

TA关注的人

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