- 博客(32)
- 收藏
- 关注
原创 【网络】实现简单的TCP、UDP服务器、TCP多进程/多线程服务器
1.0 一个简单的TCP服务器(只服务一个客户端)先看代码如下: server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<netinet/in.h>static void Usa
2017-07-06 19:25:28
3184
原创 【网络】TCP的三次握手、四次挥手、TIME_WAIT状态
传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的。每一次TCP连接都需要三个阶段:连接建立、数据传送和连接释放。“下图是⼀次TCP通讯的时序图
2017-07-03 18:21:36
1441
原创 【Linux】详解CRC校验
1. CRC校验概念 CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。2.CRC校验原理 CRC校验原理看起
2017-06-27 18:25:28
1342
原创 【Linux】端口分类
什么是端口? 可以这样说:端口是计算机与外部通信的途径,没有它,计算机便又聋又哑。 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等。二是逻辑意义上的端口,一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于
2017-06-25 00:16:22
929
原创 【Linux】子进程的异步等待方式
前面的博客中我们也讲过了僵尸进程的概念,我们知道当一个父进程创建一个子进程时,最好要调用wait或者waitpid函数等待子进程,不然会产生僵尸进程造成内存泄漏的问题。一般父进程在等待子进程时有两种方式等待,一种是阻塞式等待,这时父进程不能处理自己的工作;另一种是以非阻塞式等待,父进程处理自己工作的同时,要以定时轮询的方式,去查看有没有子进程等待清理。wait()和waitpid()的区别<1>wa
2017-06-17 23:55:07
449
原创 【Linux】mysleep函数---普通版本与规避竞态条件版本
在实现mysleep函数之前,先介绍一下一会儿程序中要用到的函数。信号捕捉函数:sigaction函数 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)。 他是POSIX的信号接口,而signal()是标准C的信号接口(如果程序必须在非POSIX系统上运行,那么就应该使用这个接口)给信号signum设置新的信号处理函数act, 同时保留该信号原有的信号处理函
2017-06-16 23:05:19
315
原创 【Linux】线程安全和可重入函数
可重入函数和不可重入函数 函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入。 当程序运行到某一个函数的时候,可能因为硬件中断或者异常而使得在用户正在执行的代码暂时中断从而转向内核态,当内核处理完异常这个时候如有一个信号需要被处理,调用sighandler函数切换至用户态处理这个信号,而处理这个信号的时候
2017-06-15 13:32:08
482
原创 【Linux】进程间通信--信号量
一. 什么是信号量 为了防止出现因多个程序同时访问一个共享资源而引发的问题,我们需要在任一时刻只能有一个执行线程访问代码的临界区域。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,信号量它本质上是一个计数器,是用来统计临界区中临界资源数目的计数器。二.信号量的工作原理 (1)信号量在进程间传递的是个整数值。 (2)信号量是个二元信号量
2017-06-09 16:31:22
293
原创 【Linux】使用gdb调试多进程多线程程序
一、调试多进程 默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。设置方法: set follow-fork-mode [parent|child]
2017-06-07 13:51:42
490
原创 【Linux】linux下atexit()函数的使用
函数名: atexit头文件:#include功 能: 注册终止函数用 法: void atexit(void (*func)(void)); atexit函数是一个特殊的函数,它是在正常程序退出时调用,来对终止处理函数进行登记。我们把它叫为登记函数 。按照ISOC的规定,一个进程可以登记多达32个函数,这些函数的函数类型应为不接受任何参数的vo
2017-05-01 17:58:37
626
原创 【数据结构】Stack和Queue的模拟实现
1.1 Stack的实现栈:一种特殊的线性表,其只允许在固定一端进行插入删除操作,进行插入删除操作的那一端称为栈顶。它又称为后进先出的线性表。下面我们就来模拟实现栈: 要求:利用萃取的方法进行数据拷贝萃取思想: 在进行扩容时,先创建新空间,再把原空间的数据拷贝到新空间,再释放旧空间,最后指向新空间。 在把原空间的数据拷贝到新空间时,我
2017-04-21 22:18:26
393
原创 【Linux】僵尸进程与孤儿进程
今天要给大家介绍两个悲伤的进程:僵尸进程和孤儿进程。话不多说,直接介绍。 之前的博客有讲过保存进程信息的一个重要的数据结构,task_struct结构体,其中,state表示进程可能出现的状态。如下:static const char * const task_ state _array[]={ R(running), S(slee
2017-04-18 17:34:00
336
原创 【C++】浅谈boost库智能指针
模拟实现Boost库中的智能指针1、思考当面试官问你什么是智能指针,该怎么回答2、模拟实现AutoPtr,并给出其中存在的问题,为什么标准库强烈建议不要使用AutoPtr3、模拟实现ScopedPtr--> 隐深一个类如何防止被拷贝4、模拟实现ScopedArray-->思考库里面为什么没有引进ScopedArray5、模拟实现Share
2017-04-10 00:14:17
845
原创 【Linux】Linux下实现一个简单的进度条程序
相信大家都下载过东西,那么大家肯定都见过那该死的进度条,每次见到它缓慢的增长都想原地爆炸,那大家有没有想过进度条是怎样实现的?通过以下的分析,会发现进度条的实现其实很简单。 而在实现进度条之前,我们先引入缓冲区的概念:标准I/O库的缓冲主要分为3种:全缓冲、行缓冲和不缓冲全缓冲:全缓冲就是当输入或输出时,当缓冲区被填满了之后,才会进行实际的I/O操作。行
2017-04-08 16:14:50
351
原创 【C++】Vs2008环境下安装编译boost库
看完文章若还有疑惑,可以推荐去看一下:http://jingyan.baidu.com/album/11c17a2c765763f446e39dc1.html?picindex=1(经本人测试证明,文中的vs2013安装方法同样适用于vs2008)下载 进入http://www.boost.org/,下载源码包,我用的版本是boost 1.55.0.zip。
2017-04-05 21:22:52
582
1
原创 【Linux】Linux下的黏滞位说明
1.黏滞位的背景 一般情况下,只要用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。也就是说,只要对一个目录有写访问权,任何人都可以删除该目录中的文件。对于个别用户使用的目录,这种行为是很合理的。eg:1>进入超级用户(root)模式,创建一个mytest目录,并设置其权限为777
2017-03-31 21:38:04
347
原创 【Linux】linux下find指令的所有选项
Find指令它是Linux系统使用中的非常重要的一条指令,它也包含了很多选项。1.它的指令格式如下:find pathname -options [-printf -exec -ok ...] 2.指令功能:用于在文件树中查找文件,并做出相应的处理。3.指令中的参数: pathname:表示所要查找的目录路径.例如”.”表示当前目
2017-03-31 12:51:55
647
原创 【Linux】Linux下的Access time/Modify time/Change time三个时间
1.Access time/Modify time/Change time这三个时间在Linux系统下,用stat指令可以查看文件信息,主要是可以查看inode的信息。文件显示的信息分别为: File:文件名 Size:文件大小 Blocks:文件使用的数据块总数IO
2017-03-25 16:06:04
1342
原创 【Linux】文件权限管理
问题:创建一个目录,进入目录,在目录里创建文件并ls显示出来各需要什么权限?1.创建目录需要什么权限?建一个目录temp,将目录文件属性的拥有者和所属组都设置成超级用户root(此操作要在root模式下执行) 回到普通用户模式,进入temp目录中创建一个目录看能否成功? 会发现没有权限,此时目录文件属性的拥有者和所属组都是root ,在当前普通用户模式下(即你自己)是没有没有权限在temp里新
2017-03-25 13:45:07
558
转载 【转载】VC程序测试函数的运行时间
转载自:http://blog.csdn.net/miss_acha/article/details/7255199介绍 我们在测试一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数。还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者算法的运行时间。编译
2017-03-09 16:18:13
375
原创 【C++】归纳要点,轻松学会继承
从前一座大山下住着一名老翁,他家门前有两座大山,切断了他家和外界的联系。因此他决心把山平掉,另一个“聪明”的智叟笑他太傻, 认为不能。老翁说:“汝心之固,固不可彻,曾不若孀妻弱子。虽我之死,有子存焉;子又生孙,孙又生子;子又有子,子又有孙;子子孙孙无穷匮也,而山不加增,何苦而不平?”大家都知道是谁吧,当初看到继承这个概念,我第一反应就是愚公的那句,“虽我之死,有子存焉;子又生孙,孙又生子;子又有子,
2017-03-07 19:43:32
336
1
原创 【C语言】通讯录管理系统(容量可变)
在实现容量可变的通讯录之前,我们得想弄清楚一下几个函数。 malloc函数 函数原型: extern void *malloc(unsigned int num_bytes); 功能: 分配长度为num_bytes字节的内存块 返回值: 返回值类型是void *,所以我们可以把分配好的空间强制类型转化成你要使用的类型。如果内存分配成功则返回指向被分配内存的指针,否则返回空指
2017-03-07 16:39:54
449
原创 【C语言】通讯录管理系统(容量固定)
C语言——通讯录管理系统(容量大小固定)话不多说,直接上代码。tongxunlu.h#ifndef _TONGXUNLU_H_#define _TONGXUNLU_H_#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct tongxunlu{
2017-03-07 13:53:58
435
原创 【C语言】详解栈帧
今天我们将通过栈帧详解C程序中函数间的调用过程。栈帧是什么? 栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧结构,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈
2016-11-22 22:27:13
1918
原创 【C语言】简单实现三子棋
今天我们来完成一个三子棋的小游戏。游戏要实现:在3*3的棋盘上进行人机对弈,玩家输入棋盘坐标下棋,电脑通过产生随机数下棋。最终,谁先完成三子相连,就是赢家。若在棋盘下满还未决出胜负,那就是平局。为了完成这个游戏,我们要建立三个文件,分别为chessboard.h chessboard.c test.c它们分别完成的任务是相关函数的声明,相关函数的实现,以及
2016-11-07 12:51:07
515
原创 【C语言】编译链接的详细过程
相信大家在学习C语言时,肯定会有这么一个问题,计算机把一段程序转化为能识别的二进制机器语言的过程是什么? 大体的来讲需要经历四个过程:预处理,编译,汇编,链接。接下来我会给大家一一说明。首先预处理过程所做的操作是 进行程序的宏替换,去注释,头文件按照路径展开,以及条件编译。接着编译操作完成把C语言转成汇编语言。再接下来,汇编操作完成把汇编语
2016-11-04 22:16:32
8308
2
原创 【C语言】宏和函数的区别
由之前的宏的引入我们知道,宏函数可以完成一些简单的运算。那是不是宏函数就可以取代函数呢?宏函数和函数到底有哪些区别呢?下面我们来分析他们其中的区别。1.代码长度: 对于宏,每次使用时,宏代码都被插入到程序中。除了非常小的宏之外,程序的长度将大幅度增长。而对于函数,函数代码只出现在一个地方,每次使用这个函数时,都调用那个地方的同一份代码。2.执行速度: 函数的调用是需要付出
2016-11-04 21:42:59
1303
原创 【C语言】熟悉预处理标识符和宏
此次分享的是预处理相关的知识,如有错误,请指出。1.预定义符号__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间如:printf("file:%s\tline:%d\tdata:%s\ttime:%s\n",__
2016-11-04 19:24:53
426
原创 【c语言】多种方法:将十进制数转化成二进制数,计算其中1的个数
以下是我学到的三种方法,如果大家还有更好的方法,可以讨论交流。首先,我们得知道十进制怎样转化成二进制,如下图。得到10的二进制数为1010那么我们会发现,10%2是判断二进制数的最后一位是0还是1,判断完成后向右移一位即10/2得到5,接着5%2判断二进制数的倒数第二位是0还是1,判断完成后向右移一位即5/2得2,重复这个过程,直到0/2结束。最终我们得到了10的二进制数1010.
2016-10-11 14:02:54
11690
4
原创 这一次,靠自己。
今天,想谈点事儿,来写篇博客,先说一件事儿,我要被我自己蠢哭了,前两天好不容易写的博客,没想到格式把我给坑了,我看得改过来,首先得把这东西玩熟练。 我呢,大三党一枚,正站在人生方向的十字路口,现在想想我和计算机还真是有缘分,还记得我应届高三报志愿的时候,因为成绩不理想,就随便填报了计算机专业,随后我复读了一年,又到报志愿的时候我不知道报什么好,于是报了计算机专业,等到新生报到真的拿到计算
2016-09-24 18:31:58
325
原创 【C语言】菜鸟的指针入门
一直以来,指针都是我在C语言部分的一大硬伤,因为当初基础概念弄不清楚,导致后来的听课如同听天书。今天,老师帮我们重新梳理了指针的相关知识,虽然只是一些概念性的,由于时间关系没有深入讲解,但这次我好像对指针了解一些了,以下是我的收获。理解指针: 对于int * p来说:指针的内容—— 别人的地址指针的地址—— &p指针指向的内容—— *p理解指针类型:
2016-09-21 20:49:05
1366
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人