Chinaunix首页 | 论坛 | 博客
  • 博客访问: 463591
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

发布时间:2014-11-04 16:04:57

TCP keepalive overviewIn order to understand what TCP keepalive (which we will just call keepalive) does, you need do nothing more than read the name: keep TCP alive. This means that you will be able to check your connected socket (also known as TCP sockets), and determine whether the co.........【阅读全文】

阅读(701) | 评论(0) | 转发(0)

发布时间:2014-11-04 15:24:38

#include <sys/socket.h>int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len);第一个参数socket是套接字描述符。第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。option_name指定准备设置的选项,option.........【阅读全文】

阅读(977) | 评论(0) | 转发(0)

发布时间:2014-08-18 16:25:56

8  高性能服务器程序框架服务器解构为三个主要模块:IO处理单元。四种IO模型和两种高效事件处理模式。逻辑单元。两种高效并发模式。存储单元。(暂不讨论)IO模型:阻塞IO非阻塞IOIO复用//程序阻塞于IO复用系统调用,但可同时监听多个IO事件。SIGIO信号//信号触发读写就绪事件,用户程序执行读写操作,程.........【阅读全文】

阅读(3795) | 评论(0) | 转发(3)

发布时间:2014-11-03 22:00:56

使用io_service作为处理工作的work pool,可以看到,就是通过io_service.post投递一个Handler到io_service的队列,Handler在这个io_service.run内部得到执行,有可能你会发现,io_services.dispatch的接口也和io_service.post一样,但不同的是它是直接调用而不是经过push到队列然后在io_services.run中执行,而在这个示例.........【阅读全文】

阅读(1231) | 评论(0) | 转发(0)

发布时间:2014-03-27 18:10:23

问题一:int *p1 = new int[10]; int *p2 = new int[10](); 有啥区别?答:我理解 int *p2 = new int[10]();申请了空间而且进行了初始化int *p1 = new int[10];只申请空间没有进行初始化原因:对于些结构体我们看()往往表示构造函数int基本类型算初始化吧理由: 测试输出两种值 会发现p1值未知而p2清.........【阅读全文】

阅读(724) | 评论(0) | 转发(0)

发布时间:2015-01-15 16:25:34

配置篇安装完了vim,发现很是不好用,要什么没什么,操作还是各种不方便.这里就要配置出马了.一般来说,在linux下的自己的目录下都有一个.vimrc文件和.vim文件夹.一般路径如/home/summer/.vimrc和/home/summer/.vim.而我们的插件和配置也都在这里进行有一些是基本都要配置的基础的配置: 1. 显示行号.........【阅读全文】

阅读(608) | 评论(0) | 转发(0)

发布时间:2015-01-14 10:48:10

   在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)         1. 泛化(Generalization)   &nb.........【阅读全文】

阅读(640) | 评论(0) | 转发(0)

发布时间:2014-12-29 19:37:31

将构造函数,析构函数声明为私有和保护的,那么对象如何创建?已经不能从外部调用构造函数了,但是对象必须被构造,应该如何解决,麻烦大家帮忙说明,关于构造,析构函数声明为私有和保护时的用法??? 提出这个问题,说明你已经对c++有所思考了。从语法上来讲,一个函数被声明为protected或者private,那么这.........【阅读全文】

阅读(493) | 评论(0) | 转发(0)

发布时间:2014-12-29 11:12:35

......【阅读全文】

阅读(494) | 评论(0) | 转发(0)

发布时间:2014-12-07 22:54:19

C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码:#include <iostream>using namespace std;int main(){const int a = 1;const int b = 2;int array[ a + b ] = {0};for (int i = 0; i < sizeof array / sizeo.........【阅读全文】

阅读(623) | 评论(0) | 转发(0)

发布时间:2014-11-28 18:01:40

以太网(IEEE 802.3)帧格式: 1、前导码:7字节0x55,一串1、0间隔,用于信号同步 2、帧起始定界符:1字节0xD5(10101011),表示一帧开始 3、DA(目的MAC):6字节 4、SA(源MAC):6字节 5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留.........【阅读全文】

阅读(1191) | 评论(0) | 转发(0)

发布时间:2014-11-20 20:00:32

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。 它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。 其中,ACK是可能与SYN,FIN.........【阅读全文】

阅读(714) | 评论(0) | 转发(0)

发布时间:2014-11-18 15:08:48

由于常常要和汉字处理打交道,因此,我常常受到汉字编码问题的困扰。在不断的打击与坚持中,也积累了一点汉字编码方面的经验,想和大家一起分享。一、汉字编码的种类汉字编码中现在主要用到的有三类,包括GBK,GB2312和Big5。1、GB2312又称国标码,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用.........【阅读全文】

阅读(686) | 评论(0) | 转发(0)

发布时间:2014-11-18 10:03:46

做应用识别这一块经常要对应用产生的数据流量进行分析。抓包采用wireshark,提取特征时,要对session进行过滤,找到关键的stream,这里总结了wireshark过滤的基本语法,供自己以后参考。(脑子记不住东西)wireshark进行过滤时,按照过滤的语法可分为协议过滤和内容过滤。对标准协议,既支持粗粒度的过滤.........【阅读全文】

阅读(762) | 评论(0) | 转发(0)

发布时间:2014-11-14 16:36:04

(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)     去空格及特殊符号  s.strip() .lstrip() .rstrip(',')    复制字符串  #strcpy(sStr1,sStr)   sStr= 'strcpy'   sStr = sStr  sStr= 'strcpy'  .........【阅读全文】

阅读(831) | 评论(0) | 转发(0)

发布时间:2014-11-11 22:16:05

l  下面我们就详细的分析一下BOOST::ASIO。首先我们从宏观使用的角度来考察ASIO。作为开始首先从同步IO方式开始我们的剖析之旅。1: BOOST ASIO 下的同步IO操作。由于asio库具有在不同平台,不同编译器下工作的特性。其对不同平台和编译器的适应是其一大特色且其具有类似于ACE跨平台的特性,相比起ACE的复.........【阅读全文】

阅读(771) | 评论(0) | 转发(0)

发布时间:2014-11-11 22:03:23

1: 我预先需要知道哪些知识?   1)socket 通讯的基本知识:如tcp/ip基本原理,socket编程的基本知识,blocking/noblocking。   2) 关于select/poll/epoll模型的相关基础知识,知道其基本工作原理。   3) IOCP(IO Completion Port)完成端口的基本知识,见附录2。.........【阅读全文】

阅读(744) | 评论(0) | 转发(0)

发布时间:2014-11-11 21:33:53

前几天写了篇日志<<关于boost.asio的一点备忘>>,主要是基于其在linux平台下的实现写的,今天还是一篇备忘,根据boost.asio在win与非win下的实现来谈谈它的跨平台设计与实现.boost.asio根据系统平台提供的事件多路分发机制来实现proactor模式,实现的差异化主要体现在支持IOCP机制与支持其它分发机制,下面就基于boost.asi.........【阅读全文】

阅读(1047) | 评论(0) | 转发(0)

发布时间:2014-11-11 21:25:42

这两天事情不多,简单看了下boost.asio的源码,因为asio采用proactor模式,而windows下的IOCP本身就是这个模式的体现,所以将精力集中在了asio在linux下的实现(asio在windows下采用了IOCP,linux下用epoll,还有其它的一些实现如kqueue,select等).在高性能服务器并发模型设计中,Reactor和Proactor是两个经常用到的设计模式,.........【阅读全文】

阅读(3249) | 评论(0) | 转发(0)

发布时间:2014-11-11 21:08:56

Boost asio 实现基于epoll,但是epoll只支持reactor模式,ASIO通过封装在epoll上实现了proactor。......【阅读全文】

阅读(787) | 评论(0) | 转发(0)

发布时间:2014-11-11 20:52:02

io_service的作用io_servie 实现了一个任务队列,这里的任务就是void(void)的函数。Io_servie最常用的两个接口是post和run,post向任务队列中投递任务,run是执行队列中的任务,直到全部执行完毕,并且run可以被N个线程调用。Io_service是完全线程安全的队列。Io_servie的接口提供的接口有run、run_one.........【阅读全文】

阅读(694) | 评论(0) | 转发(0)

发布时间:2014-11-11 20:34:38

首先介绍我们会经常看到的一些寄存器:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI)2个指针寄存器(ESP和EBP)4个数据寄存器(EAX、EBX、ECX和EDX):32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和.........【阅读全文】

阅读(926) | 评论(0) | 转发(0)

发布时间:2014-11-10 21:11:59

这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:aio是linux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO。epoll作为select的li.........【阅读全文】

阅读(1147) | 评论(0) | 转发(0)

发布时间:2014-11-10 18:41:01

本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用。这几个预定义符的名称就没必要再介绍了,顾名思义嘛。点击(此处)折叠或打开// 演示 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用.........【阅读全文】

阅读(1359) | 评论(0) | 转发(0)

发布时间:2014-11-09 22:46:44

 Roger (roger2yi@gmail.com) 一个中等规模的解决方案通常都会包含多个项目,其中一些项目产出静态库,一些产出动态库,一些用于单元测试,还有的产出最终的应用程序执行档。除此以外,根据项目的需求,还会使用一些第三方的库。 所以为解决方案设置一个合理的目录结构,不但可以.........【阅读全文】

阅读(528) | 评论(0) | 转发(0)
给主人留下些什么吧!~~

tianyashuibin2014-12-08 11:22

Oscarzhao:c++11 中貌似可以

嗯,是的,在c++11中可以

下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
   int a = 1;
           ^

回复  |  举报

Oscarzhao2014-11-26 20:12

tianyashuibin:除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

c++11 中貌似可以

回复  |  举报

tianyashuibin2014-10-23 21:57

除了静态数据成员外,数据成员不能在类体内显式的初始化

举个最简单例子
struct a

  int a=1;
  int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间

回复  |  举报

tianyashuibin2014-10-23 21:39

1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
  1.类里面的任何成员变量在定义时是不能初始化的。
  2.一般的数据成员可以在构造函数中初始化。
  3.const数据成员必须在构造函数的初始化列表中初始化。
  4.static要在类的定义外面初始化。   
  5.数组成员是不能在初始化列表里初始化的。
  6.不能给数组指定明显的初始化。  
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。

回复  |  举报

tianyashuibin2014-10-23 21:32

记住静态成员这样初始化:
C/C++ code

class A
{
public:
   static const int a[3];
};
 
const int A::a[3] = {1,2,3};

回复  |  举报
留言热议
请登录后留言。

登录 注册