自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 代码的坏味道

代码坏味道:是指在代码之中潜在问题的警示信号。并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并作出相应的修改。1. 重复的代码如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。同一个class内的两个函数中含有重复的代码段两个兄弟class的成员函数中含有重复的代码段两个毫不相关的class内出现

2013-09-21 19:14:45 935

转载 Linux的多任务编程-线程

1.线程的基本概念Linux操作系统很早就具备这些多进程功能了.但有时人们认为用fork()来创建一个新进程的代价还是太大,如在Web服务器中,通常采取的多进程方案是一旦接收到访问请求后,即创建一个新的进程,由该进程执行任务,当任务执行完毕后,该进程退出.如果有大量的请求在很短的时间中频繁的访问该服务器,那么服务器耗费在创建进程,销毁进程中的机时便十分可观.如果能用线程来完成这个工作,则情

2013-09-21 18:02:07 963

转载 Linux的多任务编程-进程

Linux的多任务编程-进程进程的概念进程是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,它是系统进行资源分配和调度的基本单元.一次任务的运行可以并发激活多个进程,这些进程相互合作来完成该任务的一个最终目标.进程的特性:并发性,动态性,交互性,独立性,异步性. 进程的种类:交互式进程,批处理进程,实时进程.进程和程序是有本质区别的:程序是静态的一段

2013-09-21 18:01:10 2605

转载 面向报文(UDP)和面向字节流(TCP)的区别

面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(

2013-09-21 17:56:56 2177

转载 详解大端模式和小端模式

详解大端模式和小端模式一、大端模式和小端模式的起源        关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令

2013-09-21 17:53:37 727

转载 深入浅出进程与线程的基本概念

http://blog.csdn.net/ce123_zhouwei/article/details/8933251深入浅出进程与线程的基本概念进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握.最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂.  1.  计算机的核心是CPU,

2013-09-21 17:52:41 941

转载 TFTP协议规范

TFTP协议1. 目的TFTP是一个传输文件的简单协议,它其于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的 时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中 有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据

2013-08-14 22:50:15 860

转载 Linux 的多线程编程的高效开发经验

转自:http://www.chineselinuxuniversity.net/articles/22615.shtml本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验,用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中,我们穿插一些 Windows 的编程用例用以对比 Linux 特性,以加深读者印象。背景Linux 平台上的多

2013-08-11 18:32:25 559

转载 TCP/IP数据包结构分析

一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解网络数据包的结构,以及协议分析。如:网络监控,故障排查等…… IP包是不安全的,但是它是互联网的基础,在各方面都有广泛的应用。由IP协议衍生的协议族有10数种(据我所知),以后还会出现更多的基于IP的协议… 先从实际出发吧!一般

2013-08-11 18:30:47 1020

转载 STL中list的使用(理论)

STL中的list就是一双向链表,可高效地进行插入删除元素。现总结一下它的操作。文中所用到两个list对象c1,c2分别有元素c1(10,20,30) c2(40,50,60)。还有一个list::iterator citer用来指向c1或c2元素。list对象的声明构造():A.      listc0;                //空链表B.      l

2013-08-11 18:30:10 571

转载 Linux进程间通信(二)---管道通信之无名管道及其基础实验

管道简介   管道是Linux中进程间通信的一种方式,它把一个程序的输出直接连接到另一个程序的输入(其实我更愿意将管道比喻为农村浇地的管子)。Linux的管道主要包括两种:无名管道和有名管道。这一节主要讲无名管道,首先介绍一下这两个管道。(特点很重要啊!)1、无名管道   无名管道是Linux中管道通信的一种原始方法,如图一(左)所示,它具有以下特点:   ①  它

2013-06-30 16:16:38 748

转载 Linux进程间通信(一)---进程间通信概述及其种类

为什么会有进程间通信?   我们应该都知道了,进程是一个程序的一次执行,是系统资源分配的最小单元。这里所说的进程一般是指运行在用户态的进程,而由于处于用户态的不同进程间是彼此隔离的,但是它们很可能需要相互发送一些信息,好让对方知道自己的进度等情况,像这样进程间传递信息就叫进程间通信。进程间通信方式有几种?  就像处于不同城市的人之间的通信方式有手机、电脑等方式一样,进程间通

2013-06-30 16:14:31 548

转载 Linux多任务编程(六)---编写多进程程序及其代码

实验目的   通过编写多进程程序,熟练掌握fork()、exec()、wait()和waitpid()等函数的使用,进一步理解在Linux中多进程编程的步骤。实验内容   该实验有3个进程,其中一个为父进程,其余两个是该父进程创建的子进程,其中一个子进程运行“ls -l”指令,另一个子进程在暂停5s后异常退出。父进程先用阻塞方式等待第一个进程的结束,然后用非阻塞方式等待另一

2013-06-30 16:13:26 1657 1

转载 Linux多任务编程(五)---wait()、waitpid()函数及其基础实验

wait()和waitpid()函数说明   wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。   waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若

2013-06-30 16:08:50 1000

转载 Linux多任务编程(四)---exit()函数及其基础实验

exit()和_exit()函数函数说明   创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit()函数。当进程执行到exit()或_exit()函数时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的,其调用过程如图1所示:          从图1可以看出,_exi

2013-06-30 16:04:14 571

转载 Linux多任务编程(三)---exec函数族及其基础实验

exec函数族函数族说明  fork() 函数用于创建一个新的子进程,该子进程几乎复制了父进程的全部内容,但是,这个新创建的子进程如何执行呢?exec 函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。另外,这里的可执

2013-06-30 16:03:59 590

转载 Linux多任务编程(二)---fork()函数及其基础实验

fork()函数     在 Linux 中创建一个新进程的唯一方法是使用fork()函数。fork()函数是 Linux 系统中一个非常重要的函数,和咱们以前遇到过的函数由一些区别,因为它看起来执行一次却返回两个值,这又作何解释?不着急,慢慢看。函数说明   fork()函数用于从已存在的一个进程中创建一个新的进程,新进程称为子进程,而原进程称为父进程。使用fork()函

2013-06-30 16:03:23 636

转载 Linux多任务编程(一)---任务、进程、线程

Linux下多任务介绍  首先,先简单的介绍一下什么叫多任务系统?任务、进程、线程分别是什么?它们之间的区别是什么?,从而可以宏观的了解一下这三者,然后再针对每一个仔细的讲解。   什么叫多任务系统?多任务系统指可以同一时间内运行多个应用程序,每个应用程序被称作一个任务。   任务定义:任务是一个逻辑概念,指由一个软件完成的任务,或者是一系列共同达到某一目的的操作。

2013-06-30 16:01:30 592

转载 Linux多任务编程(七)---Linux守护进程及其基础实验

守护进程概述   守护进程,又叫daemon进程(不知怎的,我突然想起来吸血鬼日记中的达蒙了,很好看的美剧),是Linux中的后台服务进程。他是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或者等待处理某些发生的事件。守护进程常常在系统引导载入时启动,在系统关闭时终止。Linux有很多系统哦服务,大多数服务都是通过守护进程实现的。同时,守护进程还能完成许多系统任务,例如,

2013-06-30 12:57:15 585

转载 内 存 编 程

1. 内存分配方式1.1 内存分配的几种方式(1)  从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。(2)  在栈上创建。在执行函数时,函数的参数值,内局部变量的存储单元都可以在栈上创建。函数执行结束时

2013-06-30 12:50:24 760

转载 C++内存管理

C++内存管理 [导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放

2013-06-30 12:49:37 958

转载 关于同步、异步,阻塞、非阻塞的解释

在windows socket api 下:异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式;而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式。阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,如果没有数据到达,将一直挂在recv()这个函数调用上,直到读到一些数据

2013-06-30 12:47:52 1103

转载 网络socket编程指南

eej网络socket编程指南 -------------------------------------------------------------------------------- 介绍   Socket 编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知

2013-06-30 12:46:52 773

转载 Select()系统调用及文件描述符集fd_set的应用

在网络程序中,一个进程同时处理多个文件描述符是很常见的情况。select()系统调用可以使进程检测同时等待的多个I/O设备,当没有设备准备好时,select()阻塞,其中任一设备准备好时,select()就返回。select()的调用形式为:#include #include int select(

2013-06-30 12:40:18 532

转载 unix 多进程下的生产者和消费者实现

#include#include#include#include#include #include#include#include #includetypedef struct{        int buf[129];        int occupied;        int nextin;        int nextout;

2013-06-30 12:37:11 699

转载 网络编程中参数的获得与设置

取得本地主机名: int gethostname(char *hostname, size_t size); 获得主机名存到hostname中。   取得本地的信息: int getsockname(int sockfd, struct sockaddr *addr, int *addrlen); addr存有返回的主机信息。 示例:

2013-06-30 12:35:59 724

转载 系统设计之 网络模型(三)多路复用模型

多路复用的方式是真正实用的服务器程序,非多路复用的网络程序只能作为学习或着陪测的角色。本文说下个人接触过的多路复用函数: select/poll/epoll/port。kqueue的*nix系统没接触过,估计熟悉了上面四种,kqueue也只是需要熟悉一下而已。一、select模型select原型:int select(int n, fd_set *readfds, fd_set *

2013-06-30 12:34:40 689

转载 系统设计之 网络模型(二)

本章主要列举服务器程序的各种网络模型,示例程序以及性能对比后面再写。一、分类依据。服务器的网络模型分类主要依据以下几点(1)是否阻塞方式处理请求,是否多路复用,使用哪种多路复用函数(2)是否多线程,多线程间如何组织(3)是否多进程,多进程的切入点一般都是accept函数前二、分类。首先根据是否多路复用分为三大类:(1)阻塞式模型(2)多路复用模型(3)实时信号模型

2013-06-30 12:33:43 701

转载 系统设计之 网络模型(一)基础篇

全文针对linux环境。tcp/udp两种server种,tcp相对较复杂也相对比较常用。本文就从tcp server开始讲起。先从基本说起,看一个单线程的网络模型,处理流程如下:socket-->bind-->listen-->[accept-->read-->write-->close]-->close[]中代码循环运行,[]外的是对监听socket的处理,[]内的是对acce

2013-06-30 12:33:04 686

转载 Linux程序设计入门 - fork, pthread, and signals

在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫。        fork()及在UNIX程序设计中,学会fork及signal的运用,算是相当基本的功夫。        fork()及signal经常运用在daemon守护神这一类常驻程序,另外像      a4c.tty/yact/chdrv这些中文终端机程序也有用到,一般如

2013-06-30 12:31:38 902

转载 Linux中TCP连接过程状态简介

一、Linux服务器上11种网络连接状态:      图:TCP的状态机通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一

2013-06-24 21:30:22 683

转载 libev源码分析libev数据结构整理

这里选取的版本为最新版:libev-4.04。libev的代码很简练,除了对高效I/O模型等的封装文件,核心文件就两个:ev.h和ev.c,其中ev.c大概4000行左右。代码大量用到了宏,并且宏还嵌套了宏,为了便于理解libev的代码,这里对宏进行了还原。ev_watcher结构体(其成员为其它结构的公共部分):typedef struct ev_watcher {int a

2013-01-13 15:27:03 2593

转载 libevent和libev

构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。有许多解决方 案,但是 libevent 库和 libev 库能够大大提高性能和事件处理能力。在本文中,我们要讨论在 UNIX® 应用程序中使用和部署这些解决方案所用的基本结构和方法。libev 和 libevent 都可以在高性能应用程序中使用,包括部署在 IBM C

2013-01-13 15:24:21 3618

转载 深入理解HTTP协议、HTTP协议原理分析

http协议学习系列1. 基础概念篇1.1 介绍HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了H

2013-01-13 14:06:38 901

转载 C++虚继承与其他继承类的sizeof()大小详解

先看这么个问题——已知:class CBase{int a;char*p;};那么运行cout这个应该很简单,两个成员变量所占的大小有嘛——8。可由时候人就是爱犯这个错误:这么简单的问题人家会问你?再想想……好像C++类里面有个什么 函数指针,也应该占字节吧!?什么指针来着?忘了(还是水平低不扎实)!流汗中……算了姑且认为是构造函数和析构函数吧。一人

2013-01-13 13:59:06 967

转载 c语言全局变量和局部变量问题汇总

c语言全局变量和局部变量问题汇总 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

2013-01-13 13:55:52 960

转载 C++单例模式详解

C++单例模式详解单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。单例模式有许多种实现方法,在C++中,甚至

2013-01-13 13:51:24 537

转载 面相对象设计中组合与聚合详解

聚合与组合的概念相信不用我在此赘述大家就已经了解了 下面直接上例子程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群

2013-01-13 13:49:08 576

转载 输入输出流详解

由于程序中经常有大量对文件的输入输出操作,它经常构成了程序的主要部分,因而C语言提供了很多输入输出的函数,它们分别用于两种类型文件输入输出系统:即由ANSI标准定义的缓冲文件(也称标准文件(流)输入输出(I/O)系统);另一类是ANSI标准中没有定义的非缓冲文件(也称非标准文件(流)输入输出(I/O)系统)。我们已经熟悉了通过键盘和显示器进行输入输出的一些函数,如scanf(),printf(

2013-01-13 13:37:34 451

转载 深入解析scanf()/getchar()和gets()等函数针对字符串输入的问题

深入解析scanf()/getchar()和gets()等函数----------------------------------------------------| 问题描述一:(分析scanf()和getchar()读取字符) |----------------------------------------------------scanf(), getchar()等都

2013-01-13 13:36:27 895 1

空空如也

空空如也

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

TA关注的人

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