自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 poll服务器

#include#include#include#include#include#include#include#include#define SIZE 1024static void usage(const char *proc){ printf("Usage:%s [local_ip] [local_port]\n",proc);}int startup(

2017-07-09 21:02:33 188

原创 select服务器

#include#include#include#include#include#include#include#includeint fds[sizeof(fd_set)*8];static void usage(const char *proc){ printf("%s [local_ip] [local_port]\n",proc);}int startup

2017-07-09 20:37:47 164

原创 TCP/IP协议中的端口

涵义:      一个IP地址的端口通过16bit进行编号,最多可以有65536个端口。端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。        端口的分类:逻辑端口逻辑意义上的端口有多种分类标准,下面将介绍常见的按端口号分布的分类:(1)公认端口(Well-Known Ports)知名端口即众所周知的端口号,范围从0到10

2017-06-24 11:13:49 594

原创 CRC校验码

1.CRC校验原理    根本思想就是先在要发送的帧后面附加一个二进制序列(这个二进制序列就是CRC校验码),生成一个新帧发送给接收端。当然,这个附加的二进制序列要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以这个选定的除数(同样采用“模2除法”)。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处

2017-06-24 10:38:14 981

原创 子进程的异步等待方式

我们知道用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻 塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在理自己的工作的同时还要记得时不时地轮询一 下,程序实现复杂。       其实,子进程在终止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略,父进程可以自定

2017-06-15 10:07:28 178

原创 普通版本mysleep和规避竞态条件的mysleep

我们模拟实现一下sleep,称为mysleep,在实现之前先介绍三个函数alarm函数,sigaction函数,以及pause函数。      首先我们来看alarm函数:       #include        unsigned int alarm(unsigned int seconds);       调用alarm函数可以设定一个闹钟,大家都知道,在现实生活中,闹钟的作

2017-06-12 13:46:19 437

原创 线程安全与可重入函数

1.什么是可重入函数和不可重入函数?    可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量,静态变量等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。    这么说,

2017-06-09 16:42:09 214

原创 gdb调试多进程多线程

1.调试多进程       默认设置下,在调试多进程程序时gdb只会调试主进程。但是gdb(>V7.0)支持多进程的分别以及同时调试,换句话说,gdb可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。       接下来,首先介绍一下follow-fork-mode和detach-on-for

2017-06-05 17:32:37 276

原创 task_struct源码

struct i387_struct{long cwd;            // 控制字(Control word)。long swd;            // 状态字(Status word)。long twd;            // 标记字(Tag word)。long fip;            // 协处理器代码指针。long fcs;      

2017-04-15 14:40:29 456

原创 Access/Modify/Change时间

这里,我们解释Access/Modify/Change时间是什么时间?如何修改Access/Modify/Change时间?    1.Access/Modify/Change时间是什么时间?首先我们先用stat命令查看一个文件的这三个时间。接下来,我们来解释一下这三个时间。Access:文件最近一次被访问的时间,当编辑器打开文件时,使用cat,more,less,grep

2017-03-23 14:59:15 1106

原创 创建一个目录,进入目录,在目录里创建文件并用ls1。显示出来各需要什么权限

1.创建一个目录需要什么样的权限?我们先将目录base的拥有者和所属组都设置成root,然后在普通用户(也就是自己的用户)下,在base里创建一下目录,看一下是否可以创建成功。我们可以看到base的拥有者和所属组都是root,在wcx用户下,是不能在base里创建一个目录的,那么我们把拥有者改成wcx,看一下是否可以成功。我们看到当把base拥有者改为wcx(也即是自己

2017-03-22 20:29:33 3319

原创 c++派生类内存分布图

在这里主要看一下带有虚函数的派生类的内存分布图1.单继承class Base{private: int b;public: virtual void show1() { cout<<"Base::show1"<<endl; } virtual void show2() { cout<<"Base::show2"<<endl; }};class Deriv

2017-03-07 20:31:43 891

原创 c语言实现通讯录

头文件包含的内容:#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includetypedef struct LNode{ char name[20]; char sex; int age; char tel[20]; char ad[40]; struct LNode * next;}LNode,

2016-12-29 16:58:01 262

原创 动态顺序表

#include"test.h"#includevoid InitSeqList(SeqList* pSeq) //初始化{ assert(pSeq); pSeq->size = 0; pSeq->capacity = 2; pSeq->Seq = (Datatype*)malloc(sizeof(Datatype)*(pSeq->capacity)); if(NULL =

2016-12-29 16:50:27 184

原创 理解编译链接的每个过程

在理解编译链接的每个过程之前,我们可能要先谈谈计算机语言的发展历史了。计算机语言经历了机器语言、符号语言、高级语言这几个阶段。机器语言就是由0和1组成的机器指令,计算机也就只能识别和接受由0和1组成的指令。符号语言又称汇编语言,在计算机语言的基础上,加入了一些助记符。而高级语言就接近于人们习惯使用的自然语言和数学语言。而现在我们熟悉的C语言就是高级语言的一种。但是由于计算机不能直接识别高级语言,所

2016-11-04 19:15:49 513

原创 宏和函数的区别

我们先来看宏和函数的区别:     第一点:一般的函数比方说MAX函数的头部是这样的void MAX(int x,int y),我们可以看到函数的形参x和y都是int类型的。那么我为什么要强调这一点呢?因为宏最大的特点就是与类型无关。什么叫做与类型无关呢?接下来我们一起来看。比如我们定义一个宏函数完成分配空间的功能。#include#define MALLOC(n,type)\ ((t

2016-11-03 20:51:19 472

原创 判断100到200之间的素数的方法的不断优化

方法一:          判断一个数是否是素数,比如101,我们首先能想到的最直观的方法就是让101除以2到100之间所有数,如果都不能整除,那么说明101就是素数;如果被2到100之间的任意一个数整除了,就说明它不是一个素数。现在我们来看如何判断100到200之间的素数,有了判断一个数是否是素数的基础。我们现在只需要把100到200之间的所有数以刚才的方法遍历一遍就可以找出100到200之

2016-10-11 12:40:48 11432 5

原创 走向编程

我是西安工业大学计算机学院的一名学生,我的博客名叫小兵四号,为什么是四号呢?我有两个二十年的像家人一样的朋友,一个是小兵二号,另一个则是小兵三号。我最小所以是四号。那为什么没有小兵一号呢?因为小兵二号说她要是二号就没有人敢是一号。哈哈,你看,我有个多么牛的靠山啊!        我的真实姓名叫王晨曦。晨曦的意思是早晨的第一缕阳光,在字典中可以查到的呦!很喜欢这个诠释,感觉第一缕阳光总会给人带来

2016-09-24 21:04:44 315 2

原创 菜鸟的学习心得之为什么定义指针类型

在这里,我想跟大家分享一下我的学习心得,我是刚刚学习c语言的菜鸟,认识到的比较浅薄,希望大家可以一起学习,同时也记录了我的学习过程。我们都知道数据有数据类型,比如有整型、字符型、单精度浮点型、双精度浮点型等等,在32位的机器中整型占用四个字节,字符型一个字节,单精度浮点型占用四个字节,双精度浮点型占用八个字节。会有不同的数据类型,是因为可以节省空间。例如,性别有男,女之分,那么两个比特位就可以把性

2016-09-21 20:40:18 688

空空如也

空空如也

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

TA关注的人

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