2008年11月27日星期四
二维数组
#include <iostream>
#include <cstdlib>
#include <cstdio>
char** two_d_array(int m, int n);
int main(int argc, char **argv){
int index = 0;
int ** aaa;
aaa = (int**)two_d_array(3,12);
for(; index < 3; index++)
strcpy((char *)aaa[index], "hello");
for(index = 0; index < 3; ++index)
std::cout<<(char *)aaa[index]<<std::endl;
std::cout<<(char)aaa[1][1]<<std::endl;
free(aaa);
return 0;
}
char** two_d_array(int m, int n){
int i;
char ** planar, *array;
if(! (m && n)) return NULL;
planar = (char **)calloc(1, m * sizeof(planar) + m * n);
array = (char *)(planar + m);
for(i = 0; i < m; i++)
planar[i] = array + n * i;
return planar;
}
2008年10月7日星期二
keep-alive
这个字段的意思是在一个TCP连接中处理多个HTTP的请求和回应.
不同于一般的对每个请求/回应都建立单独的TCP连接,keep-alive字段指明重用TCP连接.这种方法能有效的改善HTTP服务器的性能.
因为减少了TCP握手的过程,这种方法能减少网络流量和降低并发请求的延迟.而且长时间的连接也能让TCP层有时间根据网络状况自动调整.
而对于HTTPS或者是HTTP+SSL的连接,这种方法有更能减少建立安全连接的次数.
在HTTP/1.1中,对任何连接,keep-alive是默认选项.也就是说,除非特别指明,这个选项都是打开的.
由于TCP是一个面向流的协议,为了重用一个已有的连接,HTTP必须要能够区分上一个回应的终点和下一个请求的起点.也就是要求连接上的所有信息都包含自己的长度.也就是Content-Length字段.
2008年9月27日星期六
转帖
毒奶粉事件发生到现在,听得最多的一句话就是:这是体制的问题。
在层出不穷的悲剧里,听得最多的一句话就是:这是体制的问题。
是不是体制的问题?是,这绝对是体制的问题。
从SARS到现在的毒奶,处理方法是一样的:先瞒、瞒不了骗、骗不了就承认一部分,然后撤几个官员了事,最后宣传包装成一件功劳。
如果这次毒奶粉是传染病毒,估计全球都得死伤惨重——可谁能保证下一次不是病毒呢?
是的,如果我们有言论自由,如果我们有选择及罢免政府的自由,如果我们有强大且独立的媒体,如果我们有游行示威的自由,如果我们有免于恐惧的自由……是的,这样的体制才能保护我们。
我们有没有这样体制?没有。
所以可以很自然地说出那句话:这是体制的问题。李长江下了,不过换个张长江。什锦八宝饭馊了,不过上碗平强汤。
所以,算了吧。
可是,且慢,你忘了,我们自己就是体制的一部分。
这体制的存在,有我们的不作为。
我们得有所作为。
这作为不是鼓吹暴力,不是以暴易暴。暴力只会带来一个更坏的体制。
这作为不是希望他人去牺牲,牺牲永远只是个人选项,一个人永远没有资格去鼓动他人牺牲。
这作为是忍耐地慢慢做一件事。
让李长江辞职,这是体制进了一小步;张长江还不行,让张长江辞职,这又是体制进了一小步。他换一个,我们盯一个,最后就是质检体制的进步。
他不让我们在媒体里说,我们网络上说;他不让我们在网络上说,我们在嘴上说;我们不停地议论,嘲讽他的谎言,最后就是言论体制的进步。
那些拒不认错的企业,那些强词夺理的企业,我们记住它们的名字,永不消费它们的产品,最后就是企业文化的进步。
我们呼吁杨佳应该得到公平、公正、公开的审判;接下来,我们呼吁田文华或者李长江应该得到公平、公正、公开的审判,最后就是法制的进步。
并不需要牺牲,并不需要成为意见领袖,并不需要多么大的权力,只要你有选择权,你就能让体制变坏,或者变好。
我们能改良体制,我们能选择体制,我们就是体制。
到了我们多过他们的那一天,体制就变了。
"这都是体制的问题",不要用这么重的虚拟铁锤砸掉你的自信,砸掉他人的信心。
你说"算了,没用的",就等于投了你憎恨的体制一票。
我们享受生活,我们和美好的人呆在一起,我们保持怀疑,我们批评,我们不合作,我们能快乐地改变这个体制,我们就是体制。
如果需要一百年,我们就花一百年。如果需要一千年,我们就花一千年。
今天居然错在这个上面了,小本子记下来
//=====================
cout << *iter << endl;
++iter;
这两个才是等价的
2008年9月26日星期五
2008年9月18日星期四
2008年8月13日星期三
mingw下使用boost::thread
先要设置PATH路径,bjam只能通过这个路径找到g++
在/tools/jam/src下调用
build.bat mingw e:\ty\mingw
mingw 是指定toolset
e:\ty\mingw 是指定mingw的位置
(本来手册上说的是 --toolset=mingw --toolset-root="e:\ty\mingw" 但是我实际用的时候会出错,会把 --toolset-root="e:\ty\mingw" 这一整句都当作mingw的路径,结果就是找不到mingw.)
然后再 tools\jam\src\bin.ntx86\ 下调用编译好的 bjam.exe
bjam.exe --build-dir="e:\tmp" --toolset=gcc --with-thread stage
这个地方要用 gcc 做参数,用 mingw 不行,stage不知道是什么版本,我没查. --with-thread 是只编译thread库.
这就是编译的过程.
使用这个库如下
g++ -Wall boost.thread.test.cpp -o thread.test.exe -Ie:\ty\boost_1_35_0\ -Le:\ty\lib -lthread
用这个命令需要把上面编译的 boost_thread-mgw34-mt-1_35.lib 拷到 e:\ty\lib 文件夹下面,改名为 thread.lib 这个和Linux下不一样,不用改成libthread.
这样就应该能够编译出来了.
生成的exe运行的时候需要编译thread库是生成的 boost_thread-mgw34-mt-1_35.dll 文件在exe的当前文件夹中.
boost.thread.test.cpp的内容可以这样:
#include <boost/thread/thread.hpp>
#include <iostream>
void hello()
{
std::cout << "Hello world, I'm a thread!" << std::endl;
}
int main(void)
{
boost::thread thrd(&hello);
thrd.join();
}