Chinaunix首页 | 论坛 | 博客
  • 博客访问: 884951
  • 博文数量: 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.........【阅读全文】

阅读(2288) | 评论(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.........【阅读全文】

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

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

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

阅读(5939) | 评论(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中执行,而在这个示例.........【阅读全文】

阅读(2902) | 评论(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清.........【阅读全文】

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

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

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

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

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

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

阅读(1984) | 评论(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.........【阅读全文】

阅读(2076) | 评论(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保留.........【阅读全文】

阅读(2843) | 评论(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.........【阅读全文】

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

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

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

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

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

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

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

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

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

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

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

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

阅读(2280) | 评论(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。.........【阅读全文】

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

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

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

阅读(2436) | 评论(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是两个经常用到的设计模式,.........【阅读全文】

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

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

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

阅读(2085) | 评论(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.........【阅读全文】

阅读(2062) | 评论(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,它和.........【阅读全文】

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

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

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

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

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

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

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

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

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

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

发布时间:2014-11-09 18:07:00

  应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0在VC\bin目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作.........【阅读全文】

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

发布时间:2014-11-09 17:51:25

1. 添加编译所需要(依赖)的 lib 文件[解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 (等同于“#pragma comment(lib, "winsock.lib") ”语句)2. 添加库(Libs)文件目录方法 1:[解决方.........【阅读全文】

阅读(1566) | 评论(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};

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

登录 注册