自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 小型HTTP服务器

#include "httpd.h" void usage(const char *proc) { printf("Usage : %s [PORT]\n", proc); } static void not_found(int client) { } void print_debug(const char * msg) { #ifdef _DEBUG_

2017-09-07 15:44:29 326

原创 文件压缩与解压缩(哈夫曼编码)

本文采用哈夫曼编码的方式进行文件(文本文件)压缩和解压缩,首先介绍项目的整体思路:哈夫曼编码压缩文件实际就是统计出文件中各个字符出现的频率,然后为每个字符生成对应的编码,然后将每个字符用哈夫曼编码的形式按字节保存在压缩文件中。而文件的解压缩实际上就是将压缩文件翻译过来保存到解压缩文件中,需要使用压缩过程中生成的配置文件配合完成。下面将具体介绍文件的压缩和解压缩步骤: 文件的压缩的核心是产生哈夫曼

2017-09-07 15:41:51 3785 1

原创 STL常用容器比较

1.STL容器分类STL的容器可以分为以下两个大类: 一 顺序(序列)容器, 有vector, list, deque, string,stack( 适配器类), queue( 适配器类), priority queues( 适配器类) 二 关联容器, 有set, multiset, map, multimap, bitset,hash_set, hash_map, hash_mu

2017-09-03 14:03:32 689

原创 Linux软链接和硬链接

文件都有文件名与数据,在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文

2017-08-02 11:56:20 351

原创 select服务器的实现

select函数是来实现多路I/O复用输入/输出模型。比纯粹的阻塞I / O模型更具有实用性,因为程序句柄会停在select这里等待,直到被监视的文件句柄至少有一个发生了状态改变。select函数的功能和调用顺序使用select函数时可以将多个文件描述符集中到一起统一监视,项目如下:1、是否存在套接字接受数据?2、无需阻塞传输数据的套接字有那些?3、那些套接字发生了异常?select的函数调用方法

2017-08-01 11:26:45 1074

原创 动态内存管理

(1)C/C++语言内存分配方式C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store)<1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量. <2>在栈上创建 在执行函数时,函数内局部变量的

2017-07-21 15:46:10 329

原创 使用gdb调试多进程、多线程程序

使用gdb调试多进程程序结果如下:使用gdb调试多线程程序结果如下:

2017-07-21 08:47:05 467

原创 网络端口分类调研

一.端口的概念在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口,如RJ-45端口、SC端口等等。逻辑端口是指逻辑意义上用于区分服务的端口,如TCP/IP协议中的服务端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。由于物理端口和逻辑端口

2017-07-15 17:27:50 370

原创 c++之指针,引用,const

一,引用的概念 引用不是定义一个新的变量,而是给一个已经定义的变量重新起⼀个别名。 格式: 类型&新的变量名=已经定义过的变量名 引用的特点: 1.一个变量可取多个别名; 2.引用必须初始化; 3.引用只能在初始化的时候引用⼀次,不能改变为再引用其他的变量。

2017-07-15 17:17:24 293

原创 c++之日期类的实现

Date .h#pragma once#include <iostream> using namespace std;class Date{ friend void PrintCalendar(int year, int month); //打印日历 friend istream& operator>>(istream& is, Date& d); friend

2017-07-12 10:55:09 348

原创 c++ 之 复数类的实现

//实现复数类的基本成员函数//实现复数之间比较大小//实现复数的四则运算/* 复数加法:复数z = a + bi(a, b为实数)当b = 0时, z为实数, 可以比较大小;当b不为零时, z为虚数, (a = 0时为纯虚数), 不能比较大小.*//* 复数减法:设z1=a+bi,z2=c+di是任意两个复数,则它们的差是 (a+bi)-(c+di)=(a-c)+(b-d)i.两个

2017-07-11 15:06:05 1554

原创 信号之myseep函数

alarm函数调用alarm函数可以设定一个闹钟,也就是告诉内核在seconds秒之后给当前进程发SIGALRM信号, 该信号的默认处理动作是终止当前进程。 这个函数的返回值是0或者是以前设定的闹钟时间还余下的秒数。pause函数pause函数使调用进程挂起直到有信号递达。如果信号的处理动作是终止进程,则进程终止,pause函数没有机会返回;如果信号的处理动作是忽略,则进程继续处于挂起状态,paus

2017-07-05 20:28:13 375

原创 c++之函数重载

一 概念 C++中函数重载是如何实现的呢?这个可以分解为下面两个问题: 1.声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了) 2.当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调用的是哪个函数呢) 在同一作用域类,一组函数的函数名相同,参数列表不同(个数不同/类型不同),返回值可

2017-07-04 00:33:17 336

原创 C语言实现单链表面试题汇总

1、从尾到头打印单链表void PrintListTailToHead(PSListNode pHead){ if (NULL != pHead) { //递归实现 PrintListTailToHead(pHead->pNextNode); printf("%d ", pHead->data); }}2、删除一个无头单链

2017-07-01 23:45:11 494

原创 linux之信号屏蔽pending

一、信号的三种表示:1)信号递达(Delivery):实际执行信号的处理动作 2)信号未决(Pending):信号从产生到递达之间的状态 3)进程可以选择阻塞(Block )某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才 执行递达的动作。 注:阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后 可选的⼀种处理动作。二、信号在内存中的表示图

2017-06-30 22:25:38 623

原创 读者-写者模型

一.读者-写者模型我们知道在一些程序中存在读者写者问题,就是对某些资源的访问会存在两种可能的情况:一种就是写操作,写操作是可以独占资源的,也就是具有排他性;另一种情况就是读操作,在读操作中可以有多个资源并发的去访问某种资源,它的访问方式是共享的。(一般由于写端操作次数少,读端操作次数多,因此写端的优先级较高)。这种模型是从对文件的读写操作中总结出的一种模型。1.在读者和写者的这种模型中,存在3种关系

2017-06-23 00:13:29 2660

原创 LINUX之死锁

一 死锁的概念 死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。 最简单、最好构造的死锁就是下图这种场景了。 说明: 线程1已经成功拿到互斥量1,正在申请互斥量2,而同时在另一个CPU上,线程2已经拿到了互斥量2,正在申请互斥量1。彼此占有对方正在申请的互斥量,结局就是谁也没有办法拿到想要的互斥量,于是就发生了死锁现象。二 死锁产

2017-06-21 21:31:13 260

原创 C语言单向链表的实现

一,链表的概念一个简单结点的结构体表示为:typedef int DataTypetypedef struct Node { DataType _data; /*数据成员可以是多个不同类型的数据*/ struct Node *_next; /*指针变量成员只能是-个*/ }Node,*pNode, *pList;一

2017-06-19 21:22:25 582 1

原创 进程间通信——信号量

一,信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作:    (1) 测试控制该资源的信号量。    (2) 若此信号量的值为正,则允许进行使用该资源。进程将信号量减1。    (3) 若此信号量为0,则该资

2017-06-09 16:58:42 425

原创 进程间通信——共享内存

一, 概念 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对 其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用, 来达到进程间的同步及互斥。 二,特点 1.共享内存就是允许两个不相关的进程访问同一个逻辑内存; 2.共享内存是在两个正在运行的进程之间共享和传递数据的一种最有效的方式; 3.不同进程之间共享的内存通常安排为同一

2017-06-07 17:14:12 336

原创 LINUX线程

一, 线程的概念<1> 线程,又是被称为轻量级进程(Lightweight Process LWP),是操作系统或进程调度的最小单位。是在进程内部(地址空间)执行的。每一个程序都至少有一个线程,若程序只有一个线程,那么就是程序本身。 实际上,在Linux下没有真正意义上的线程,它是由进程模拟出来的。 由于同一进程的多个线程共享同一地址空间,因此代码和数据都是共享的,如果定义一个函数,在各线程中都

2017-06-07 14:43:10 302

原创 进程间通信——消息队列

一,什么是消息队列** 消息队列(System V标准)提供了一种从一个进程向另一个进程发送一个有类型数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。支持双向通信。二 ,在Linux中使用消息队列1.创建新的消息队列或取得已存在的消息队列 m

2017-06-05 17:12:59 465

原创 Linux进程间通信——管道(pipe)与命名管道(FIFO)

1.进程间通信问题:每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个近程中都看不到。 解决方案:进程之间要交换数据必须通过内核,因此在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走。内核提供的这种机制称为进程间通信(IPC ,Inter Process Communication). 本质:让不同的进程看到一份公共的资源,这份资源

2017-05-30 12:34:45 599

原创 字符串操作函数

定义 字符串就是一串零个或多个字符,并且以一个位模式为全0的NULL字节结尾。因 此,字符串所包含的字符内部不能出现NULL字节。字符串是一种重要的数据类型,但是c语言并没有显示的字符串数据类型,这是因为字符串以字符串常量的形式出现或存储于字符数组中。字符串长度函数strlen( const char *str) size_t my_strlen(const char *str

2017-05-29 13:50:57 487

原创 linux进程

一、进程的位置首先,Linux下C程序⽣成主要由四个步骤组成:预编译、编译、汇编、链接。当程序执行时,操作系统将可执行程序复制到内存中。程序转为进程通常需要以下步骤: (1)内核将程序读⼊内存,为程序分配内存空间; (2)内核为该进程保存PID及相应的状态信息,把进程放到运行队列中等待执行。程序转化为进程后就可被操作系统的调度程序执行了。进程的内存映像是指内核在内存中如何存放可执行程序文件。在将

2017-04-29 20:34:06 240

原创 linux环境下的gcc

一. liunx系统基本命令在liunx环境下,有很多基本命令,下面带领大家认识一下常见的命令。ls命令 ls命令 // list 列出当前文件夹的所有文件-l :列出长数据串,包含文件的属性与权限数据等 -a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用) -d :仅列出目录本身,而不是列出目录的文件数据 -h :将文件容量

2017-04-25 17:45:43 481

原创 字符串函数之strlen() , strcpy() 的模拟实现

1. strlen()函数strlen()函数用于统计字符串的长度。直到碰到第一个字符串结束符’\0’为止。利用库函数实现 接下来我们来模拟实现一下strlen()函数2. strcpy()函数作用:把从src地址开始且含有’\0’结束符的字符串复制到以dest开始的地址空间。利用库函数实现 接下来我们自己模拟实现该函数的功能其中,用 char * 作为函数返回值类型,是方便实现链式访问。3.

2017-04-21 23:07:25 562

原创 C语言:数组的运算及sizeof(),strlen()操作符的介绍

sizeof()运算符sizeof是c语言内置运算符,以字节为单位给出指定类型的大小,其作用就是返回一个对象或者类型所占的内存字节数。 用法: 1.用于数据类型 如:sizeof(Type) 运行结果如下: 2.用于变量 sizeof(var_name)注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小

2017-04-15 15:01:32 653 1

原创 Linux进程描述符task_struct结构体详解

进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,这个结构体包含了一个进程所需的所有信息。它定义在include/linux/sched.h文件中。谈到task_s

2017-04-12 21:35:33 1339

原创 C语言:折半查找的程序编写

# include<stdio.h>int binary_search(int arr[], int key, int left, int right){ while (left <= right) { int mid = left + ((right - left) >> 1); if (key > arr[mid]) {

2017-04-08 16:34:52 9215

原创 Linux系统下简易进度条的实现

在我们安装软件或打开游戏时,会看到进度条的身影。今天我们就来在linux下实现一个简易的进度条1 . 在任意一个目录下,touch jdt.c 文件 vi jdt.c 2. 按 ZZ 退出,使用 gcc jdt.c 命令,执行 ./a.out

2017-04-08 11:47:11 431

原创 Centos 7系统下的vim配置

对于Linux初学者来说,vim是不可或缺的编辑器。但是,其原始风格太过于单调,且不方便我们源代码的书写,因此,对vim编辑器的配置就尤为重要。 1. 在普通用户或超级用户下输入命令 : ls -a 查看有无 .vimrc文件,如果没有就使用命令: touch .vimrc 创建一个文件 2. vi .vimrc 开始进行一系列配置 待配置完成后,按 wq!保存

2017-04-08 11:37:44 11402 4

原创 路漫漫其修远兮

我是一个来自于陕西某个农村的孩子,今年22岁,以前对所有事物都充满好奇.所以就带着好奇来到了一个较为知名的学校.来开始我的所谓的大学生活。我的专业是电子信息工程。  我选择了编程,选择了自己今后的方向。既然已下定这个决心,那么就要坚持到底。跨专业的学习本身对于我们这些非计算机专业的门外汉来说,简直就是一种心理及生理的考验。俗话说兴趣是最好的老师,我的目标是能够找到编程本身的乐趣,让乐趣伴我走向未来

2017-03-31 17:21:05 245

原创 Linux系统中的粘滞位

> 前言粘滞位(Stickybit),或粘着位,是Lunix系统权限的一个旗标。最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。

2017-03-31 16:55:05 296

原创 Linux系统下find(查找)命令的使用方法

Linux系统下find(查找)命令的使用方法在Linux下有相当优异的查找命令。通常有两个:locate 和 find。 1. 首先讲下locate命令,该命令使用很简单,直接在后面输入“文件的部分名称”后即可得到结果。范例一:找出系统中所有与 killer.c 相关的文件名[root@localhost ~]# locate killer.c/home/killer/kille

2017-03-29 20:52:39 702 1

quickARM资料

详解quickARM核心板原理图,帮助大家更好的了解开发平台

2018-03-24

空空如也

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

TA关注的人

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