Linux后台服务器编程。
发布时间:2014-06-06 20:21:26
有几个概念需要在开头澄清一下TCP socket分两种,监听socket和传输socket两种监听socket:负责处理网络上来的连接请求(客户端的syn包到达便是连接请求来了,如果不知道syn包,请参看一下TCP三次握手);传输socket:负责在网络上的两个端点之间传输TCP数据。 未决socket:pending socket,就是.........【阅读全文】
发布时间:2014-06-06 15:47:59
在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。 linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO) SupportforLinux。下面我们就来分析一下AIO编程的相关知识。阻塞模式下的IO过程如下:int fd = open(const char *pathname, int flags, mode_t mode);.........【阅读全文】
发布时间:2014-06-05 21:45:01
在Linux和UNIX中有很多的输入输出函数,有时真是让想跟它攀点关系的菜鸟们束手无策。先来看看都有哪些函数,通过解析与总结,看看能不能让大家能这些函数有个理性的认识,哦,原来是这么回事,也就算我没白花这份闲。内核文件I/O->标准库I/O->高级I/O->IPC中1. read()/write();2. pread()/pwrite();.........【阅读全文】
发布时间:2014-06-04 22:41:33
虚拟文件系统(VFS)在我看来, "虚拟"二字主要有两层含义:1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口;2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(namespace)"来描述的, 不同的进程可能拥有.........【阅读全文】
发布时间:2014-06-04 17:54:59
direct io是一种不用内核缓存的io,它可以做到直接将用户空间的内存直接写入磁盘或者将磁盘数据直接读到用户空间的缓冲区,这种策略就是不用内核的缓存而使用用户自己设计的缓存,这一般在数据库系统中用到,初用linux的人在调用free命令的时候都会大吃一惊,为何文件cache占用了那么多的内存,太可怕了啊,其实这正是表.........【阅读全文】
发布时间:2014-06-04 10:08:53
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内.........【阅读全文】
发布时间:2014-06-03 15:08:58
首先要明白一点,就是无论你用哪种语言进行程序设计,也无论你用哪个函数进行文件操作(库函数也好,直接操作系统API也好),最终的文件打开的操作都是由操作系统来进行的,因此各种语言的情况从本质上来说都是相同的。用二进制模式打开一个文件的时候,文件本身的内容和你编写程序时用函数读到的内容完全相同(或者.........【阅读全文】
发布时间:2014-06-02 22:31:09
知道Boost中的AIO模型库是使用Epoll实现的,请看下面的讨论!应该很有帮助的,文章概论了几乎所有开发模型的效率!1: EPOLL!=AIO 我只是说Boost的网络库在linux下是用linux的epoll实现的ACE中有ACE_POSIX_AIOCB_Proactor和ACE_Dev_Poll_Reactor,分别用aio和epoll实现,这是2个不同的东西2: .........【阅读全文】
发布时间:2014-06-02 22:17:09
Unix下共有五种I/O模型阻塞I/O非阻塞I/OI/O复用(select和poll)信号驱动I/O(SIGIO)异步I/O(Posix.1的aio_系列函数)b.阻塞I/O模型 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待。。。。 数据准备好了,从内核拷贝到用户空间.........【阅读全文】
发布时间:2014-06-02 16:37:16
如何在linux下查看当前登录的用户,并且踢掉你认为应该踢掉的用户?看了网络中的一些例子.在这里总结一下.主要用到的命令有,w,who,ps,kill,pkill 查看当前登录用户: node8:/home # whoroot :0 2009-11-04 16:26root &nbs.........【阅读全文】
发布时间:2014-05-25 11:34:06
在命令行下也能产生五颜六色的字体和图案,只需要加上一些颜色代码,例如 echo -e "\033[41;36m 红底绿字\033[0m" 其中41的位置代表底色, 36的位置是代表字的颜色 那些ascii code 是对颜色调用的始末. \033[ ; m …… \033[0m 字背景颜色范围:40---.........【阅读全文】
发布时间:2014-05-24 23:03:40
使用异步 I/O 大大提高应用程序的性能学习何时以及如何使用 POSIX AIO APILinux? 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中.........【阅读全文】
发布时间:2014-05-23 15:40:46
本文将从以下几个方面来阐述信号:(1)信号的基本知识(2)信号生命周期与处理过程分析(3) 基本的信号处理函数(4) 保护临界区不被中断(5) 信号的继承与执行(6)实时信号中锁的研究 第一部分: 信号的基本知识 1.信号本质: 信号的本质是软件层次上对中断的一种.........【阅读全文】
发布时间:2014-05-22 19:55:09
new和delete运算符用于动态分配和撤销内存的运算符new用法: 1. 开辟单变量地址空间 1)new int; //.........【阅读全文】
发布时间:2014-05-22 19:53:29
c++编译常会出现free(): invalid next size(fast)或者是free(): invalid next size(normal)的问题,这大多数是内存泄漏的问题。经常出现的情况是动态数组赋值越界,导致最后在进行free时候,出现内存泄漏。解决方法,只能首先定位,然后一步一步自查,发现对数组的操作,然后慢慢带入,考虑极端情况(数组下标过大,或者.........【阅读全文】
发布时间:2014-05-22 17:19:52
1.STDIN_FILENO的作用STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。2.区别1)数据类型不一致:.........【阅读全文】
发布时间:2014-05-22 10:46:06
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出.........【阅读全文】
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;
^
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};