<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sunchenx的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sunchenx</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sunchenx]]></copyright><item><title><![CDATA[centos中设置redis开机启动]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/9240557</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/9240557</guid><author>sunchenx</author><pubDate>Thu, 04 Jul 2013 11:09:12 +0800</pubDate><description><![CDATA[1、redis安装完成后会生成4个可执行文件：redis-server、redis-cli、redis-benchmark、redis-stat，他们的作用如下
       redis-server：Redis服务器的daemon启动程序
       redis-cli：Redis命令行操作工具
       redis-benchmark：Redis性能测试工具，测试Redis在你的系]]></description><category></category></item><item><title><![CDATA[服务器端WSAAsyncSelect模型编程]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8916429</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8916429</guid><author>sunchenx</author><pubDate>Sun, 12 May 2013 10:49:20 +0800</pubDate><description><![CDATA[WSAAsyncSelect是服务器端的六种I/O模型之一，他的主要思想是运用了windows窗口的消息机制，用函数WSAAsyncSelect()将监听端口感兴趣的网络消息注册到窗口，然后在窗口的消息过程中处理，该模型只提供异步通知，并不提供异步数据传送，只适用于系统开销不大的情况。
使用该模型编程，需要基于窗口，以下CreateServerWindow提供了创建窗口的过程。
#includ]]></description><category></category></item><item><title><![CDATA[基于TCP的简单socket通信]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8905848</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8905848</guid><author>sunchenx</author><pubDate>Thu, 09 May 2013 15:38:37 +0800</pubDate><description><![CDATA[前两天开始翻看UNIX网络编程，看到了一个基于TCP的socket通信实例（客户端向服务器请求当前时间），于是自己在vs上实现了下，以加深对socket通信流程的了解，代码如下：
 
客户端
#include 
#include 
#include 
#include 
#include "../../Server/Server/SocketUtil.h"

#pragma co]]></description><category></category></item><item><title><![CDATA[用三重循环求一个字符串的最大回文串（连续重复出现的最长子串）]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8887512</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8887512</guid><author>sunchenx</author><pubDate>Mon, 06 May 2013 01:16:02 +0800</pubDate><description><![CDATA[字符串的最大回文串是指在字符串中连续重复出现的最长子串，如"jkjkfgsfgsfgsf"，回文串有"jk":2，"fgs":3，"gsf":3，"sfg":2。（格式为 子串:出现次数）。
求回文串的基本思路是：从首字符开始取长度为2的子串"jk"，然后取该子串后相邻的长度为2的子串"jk"，两个子串相邻且相等，所以"jk"为该字符串的一个回文串，继续取之后的一个长度为2的子串"fg"，与之前]]></description><category></category></item><item><title><![CDATA[逆序存储文件（三）——文件内存映射]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8872761</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8872761</guid><author>sunchenx</author><pubDate>Wed, 01 May 2013 20:21:54 +0800</pubDate><description><![CDATA[之前介绍的两种逆序存储文件的方法，由于性能问题，只适用于小文件的操作，如果源文件较大，几M，几百M，甚至几G，则需要使用文件内存映射的方式。我对内存映射的原理认识不深，也未做研究，我只知道，使用内存映射将文件映射到内存后，就可以直接通过操作映射的内存块来操作磁盘中的文件，避免了我们主动调用磁盘I/O（I/O过程被操作系统接管），从而提高了文件读写性能。
        文件内存映射的过程是：创建]]></description><category></category></item><item><title><![CDATA[逆序存储文件（二）——使用c标准库函数fopen,fseek,fread,fwrite]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8869610</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8869610</guid><author>sunchenx</author><pubDate>Tue, 30 Apr 2013 15:18:35 +0800</pubDate><description><![CDATA[使用c标准库函数实现小文件逆序存储逻辑是：
1.用fopen函数成功打开源文件和目标文件，源文件用只读方式（r）打开，目标文件用追加写入（a）的方式打开；
2.循环使用fseek定位文件指针（fopen的返回值），从SEEK_END（文件末尾）位置开始，每次多向前偏移一个字节，知道fseek返回一个非0值结束；（fseek能改变文件指针）
3.每次定位成功后，读取一个字符（fread）到缓冲]]></description><category></category></item><item><title><![CDATA[逆序存储小文件（一）——使用STL容器]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8869063</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8869063</guid><author>sunchenx</author><pubDate>Tue, 30 Apr 2013 10:48:06 +0800</pubDate><description><![CDATA[将一个4M左右的文本文件内容逆序输出到另一个文本文件中，步骤如下：
1.使用文件输入流以只读方式打开源文件，创建一个容器，使用copy函数将流内容顺序复制到容器中；
2.创建一个文件输出流，制定输出目标，反向遍历容器，将容器内容写到流中。
 
代码如下：
#include 
#include 
#include 
#include 
#include 
#include 
#]]></description><category></category></item><item><title><![CDATA[两种获取虚函数地址的方式]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8868305</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8868305</guid><author>sunchenx</author><pubDate>Tue, 30 Apr 2013 00:07:03 +0800</pubDate><description><![CDATA[今天在运行一段代码时，发现运行结果与我预期的不一样，所以google了一把，这里对研究结果作下总结
#pragma once
#include 
using std::cout;
using std::endl;
class Base
{
public:
	virtual void f()
	{
		cout<<"Base f"<<endl;
	}

	virtual v]]></description><category></category></item><item><title><![CDATA[C++ 随机数生成]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8851009</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8851009</guid><author>sunchenx</author><pubDate>Thu, 25 Apr 2013 17:47:44 +0800</pubDate><description><![CDATA[标准库（被包含于中）提供两个帮助生成伪随机数的函数：
函数一：int rand(void)；
从srand (seed)中指定的seed开始，返回一个[seed, RAND_MAX（0x7fff）)间的随机整数。
注一：个人理解，以上的描述存在问题，根据msdn的描述，rand返回的值区间为[0,RAND_MAX)，而不是[seed, RAND_MAX)，很简单的一个验证，使用time(NU]]></description><category></category></item><item><title><![CDATA[WaitForSingleObject等待一个mutex句柄时的返回值]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8849859</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8849859</guid><author>sunchenx</author><pubDate>Thu, 25 Apr 2013 15:58:28 +0800</pubDate><description><![CDATA[今天遇到了用WaitForSingleObject去等待一个Mutex句柄，对他的两个返回值（WAIT_OBJECT_0和WAIT_ABANDONED）含义有点含糊，于是写了测试代码模拟了下
 
根据msdn上的解释
WAIT_OBJECT_0：The state of the specified object is signaled.
WAIT_ABANDONED：The specifi]]></description><category></category></item><item><title><![CDATA[实现简单计数指针]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8846196</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8846196</guid><author>sunchenx</author><pubDate>Wed, 24 Apr 2013 21:52:55 +0800</pubDate><description><![CDATA[今天看了zthread库中的计数指针，于是也参考着在vs2010上写了一个来巩固对计数指针的理解
#pragma once

template
class MyCountPtr
{
	//引用计数指针只要以下两个数据成员
	//指向对象
	TypeInstance* t_instance;
	//指向计数器，计数器默认为int类型
	TypeCount* t_count;]]></description><category></category></item><item><title><![CDATA[windows平台下编译zThread库]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8835463</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8835463</guid><author>sunchenx</author><pubDate>Mon, 22 Apr 2013 18:32:09 +0800</pubDate><description><![CDATA[今天看到《c++编程思想》中并发一章，作者使用zThread这个开源库来讲解，于是我也下了个版本编译，并简单使用了下，以下是具体步骤：
 一、创建工程
      1.下载源码
       由于官网http://zthread.sourceforge.net一直上不去，所以我从http://download.chinaunix.net/download.php?id=24079&Resou]]></description><category></category></item><item><title><![CDATA[如何计算结构体大小和结构体中成员的内存偏移]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8825915</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8825915</guid><author>sunchenx</author><pubDate>Fri, 19 Apr 2013 21:03:53 +0800</pubDate><description><![CDATA[结构体字节偏移两条准则：
1、每个成员的偏移位置是自身类型大小的整数倍；
2、结构体总大小是成员中最大类型大小的整数倍。
 
以下代码在32位机器xp系统下用vs2010测试
 
例如
class test 
{
 char x1;
 char x2;
 short x3;
 float x4;
};//大小为8B
x1偏移0，当前大小1；
x2偏移为1的整数倍1，当]]></description><category></category></item><item><title><![CDATA[初识ANSI字符集和UNICODE字符集]]></title><link>https://blog.youkuaiyun.com/sunchenx/article/details/8825425</link><guid>https://blog.youkuaiyun.com/sunchenx/article/details/8825425</guid><author>sunchenx</author><pubDate>Fri, 19 Apr 2013 18:49:04 +0800</pubDate><description><![CDATA[通过了解char和wchar_t这两个类型的区别，我对ANSI字符集和UNICODE字符集有了些新的认识。
       我最初认为以下代码(2)是通不过编译的，认为L'e'只能对宽字符类型赋值，因为L会告诉编译器后面跟着的字符或者字符串会用UNICODE编码存储，L'e'就被存储为两个字节0x0065，但事实不是这样，L'e'成功的赋值给了char变量c，只不过在赋值时高字节00被截断，就相当]]></description><category></category></item></channel></rss>