自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 TCP非阻塞accept和非阻塞connect

非阻塞accept    当一个已完成的连接准备好被accept的时候,select会把监听socket标记为可读。因此,如果用select等待外来的连接时,应该不需要把监听socket设置为非阻塞模式,因为如果select告诉我们连接已经就绪,accept就不应该被阻塞。不过这样做的时候有一个BUG:当客户端在跟服务器建立连接之后发送了一个RST包,这个时候accept就会阻塞,直到有下一个

2013-10-15 10:29:32 678

转载 socketpair 进程间传递描述符

我们知道父进程在子进程被fork出来之前打开的文件描述符是能被子进程继承下来的,但是一旦子进程已经创建后,父进程打开的文件描述符要怎样才能传递给子进程呢?Unix提供相应的技术来满足这一需求,这就是同一台主机上进程间的文件描述符传递,很美妙而且强大的技术。    想象一下我们试图实现一个服务器,接收多个客户端的连接,我们欲采用多个子进程并发的形式来处理多客户端的同时连接,这时候我们可能有两种想

2013-10-15 10:22:18 1034

转载 Linux用户空间与内核空间

Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。

2013-10-09 23:55:53 737

转载 操作系统为什么要分用户态和内核态

在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING

2013-10-09 19:23:42 629

转载 非阻塞(nonblock)socket接口会否出现EINTR错误

对于socket接口(指connect/send/recv/accept..等等后面不重复,不包括不能设置非阻塞的如select),在阻塞模式下有可能因为发生信号,返回EINTR错误,由用户做重试或终止。 但是,在非阻塞模式下,是否出现这种错误呢? 对此,重温了系统调用、信号、socket相关知识,得出结论是:不会出现。 首先, 1.信号的处理是在用户态下进行的,也就是必须

2013-10-09 16:29:34 645

转载 c++中的explicit关键字及隐式类型转换

c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}

2013-10-07 16:12:35 487

转载 C++隐式类型转换 operator T

对于operator关健字用于运算符重载这我们都知道,其实operator还有另外一种作用:强制类型转换。上一周为了对应项目中一个问题,同事帮助写了一个类,使用到了operator的强制类型转换作用,后来source review的时候几个leader也不明白其作用,问我是怎么回事,当时我也只是一知半解,无奈解析了半天更天也没有让leader明白,汗。。。后来让这们同事来解析才清楚。    下

2013-10-07 15:59:15 1296

原创 常量折叠 Constant folding

常量折叠:在编译时期用常量的具体取值代替所有用到常量的地方。例如const int a = 8;cout 经过编译器扫描后,变为:cout 常量一般分为两种:可以常量折叠的常量和不可以常量折叠的常量。下面具个不可以常量折叠的常量的例子:int test(){ return 8; }const int a = test();//常量a不可以常量折叠cout

2013-10-06 20:32:16 2895

转载 c++有关编译期和运行期的访问

先要引用一一段,相信不少人看过:看这样一段代码。#include using namespace std; class A{ public: virtual void f(){cout<<"A"<<endl;} }; class B:public A { private: void f(){cout<<"B"<<endl;}

2013-10-05 12:00:51 605

原创 虚析构函数的一点理解

千万不要将析构函数和虚函数混淆起来。不管析构函数是不是虚函数,将析构函数设为虚函数是希望在通过基类指针删除派生类对象时调用派生类的析构函数。如果析构函数不是虚函数,派生类对象没有Vptr,编译器会调用基类的析构函数(在编译时就确定了)。  这样,用户在派生类析构函数中填写的代码就不会被调用,派生类成员对象的析构函数也不会被调用。不过,派生类对象空间还是会被正确释放的,堆管理程序知道

2013-10-05 11:00:42 371

转载 访问控制是在编译期间处理

该题写的是考查应聘者对于C++中的存取权限的理解,但经我稍微的分析,觉得不完全如是,现把它公开出来,希望各位能够畅所欲言,发表自己的看法有类A,它被定义在a.h中,A有private成员i,如下:class A {private:int i;// ...};A的实现在a.cpp中(具体细节略)。在另外一个main.cpp中,我们使用了A,当然,我们知道直接访问A::

2013-10-05 10:52:11 521

原创 指针轻松破除访问属性

例1:#include using namespace std;class B{int x;int y;public: B():x(1),y(2){ }};int main(){ B b; int *p=reinterpret_cast(&b); cout<<*p<<" "<<*(p+1)<<endl;

2013-10-05 09:58:17 440

转载 c++模板函数声明定义分离编译错误详解

今天看到accelerated c++上有个简单的vector容器的实现Vec,就再vs2008上编译了下: ?/////  Vec.h #ifndef GUARD_VEC_H#define GUARD_VEC_H #include #include #include

2013-10-04 16:31:30 498

转载 类与类之间的关系图(Class Diagram,UML图)

一、简介二、类的构成三、类之间的关系(Relationship)1、单向关联2、双向关联3、自身关联4、多维关联(N-ary Association)5、泛化(Generalization)6、依赖(Dependency)7、聚合(Aggregation)8、组合(Composite)四、总结一、简介类是对象的集合,展示了对象的结

2013-10-04 13:10:43 590

空空如也

空空如也

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

TA关注的人

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