DongHao: 03 2009存档

异步recv

| | Comments (0) | TrackBacks (0)
可以通过

    int opts;
    opts=fcntl(fd, F_GETFL);
    if (opts < 0)
    {
        perror("fcntl failed\n");
        return;
    }
    opts = opts | O_NONBLOCK;
    if(fcntl(fd, F_SETFL, opts) < 0)
    {
        perror("fcntl failed\n");
        return;
    }
    return;

把 fd 设为非阻塞模式(non-blocking)
在recv时

while(rs)
{
  buflen = recv(activeevents[i].data.fd, buf, sizeof(buf), 0);
  if(buflen < 0)
  {
    // 由于是非阻塞的模式,所以当errno为EAGAIN时,表示当前缓冲区已无数据可读
    // 在这里就当作是该次事件已处理处.
    if(errno == EAGAIN)
     break;
    else
     return;
   }
   else if(buflen == 0)
   {
     // 这里表示对端的socket已正常关闭.
   }
   if(buflen == sizeof(buf)
     rs = 1;   // 需要再次读取
   else
     rs = 0;
}

这段recv代码摘自http://blog.chinaunix.net/u/14063/showart_377118.html,今天帮了大忙。在非阻塞模式下,recv返回的buflen可能小于用户要求的接收长度(recv第三个参数);而在阻塞模式(blocking)下,毫无疑问,recv会把进程挂住,直到收到用户要求的长度为止。

海盗与忍者

| | Comments (0) | TrackBacks (0)
董昊:     http://developers.solidot.org/article.pl?sid=09/03/24/0859257&from=rss
徐 冠鹏: 那我就是海盗和忍者的综合体
董昊:     就叫“盗忍综”
徐 冠鹏: 不许这么叫!!!
董昊:     或者“盗忍体”
徐 冠鹏: 不许起外号!!!
董昊:     就叫你“维京海盗”
徐 冠鹏: 不成!!!!
董昊:     就叫 viking
董昊:     多酷啊
徐 冠鹏: 这么酷, 你自己留着用吧, 我就算了
董昊:     我没有海盗的气质
徐 冠鹏: 我也没有
董昊:     http://year30809.sudleyjnr.net/files/2009/03/viking2_blue_white.gif 以后作为你的logo
徐 冠鹏: 我晕, 为什么你会帮我找这些呢?  不不不不不不不!!!!!!!
董昊:      linux kernel 2.6.29都换logo了,你也换吧
徐 冠鹏: 为什么?!
董昊:     你是 xgp kernel 2.3.25 啊!
徐 冠鹏: 你能不能歇会儿?  大夫?  大夫!  给这家伙注射点儿镇静剂吧!

空中花园

| | Comments (0) | TrackBacks (0)
      阳台上的植物们长势不错,毕竟春天到了。

珍珠芦荟
珍珠芦荟,记得去年十一刚买来的时候,又薄又短,现在胖多了。

吊兰
吊兰发很多叶子,叶面也厚了。

吉庆果
这就是捡回来的吉庆果种子长出来的,嘻,当初应该给种子拍张照的。

榕树
榕树,剪了枝后看着茂密一些了,有很多新芽,等夏天了应该能基本成了小伞状。

gcc -O3

| | Comments (0) | TrackBacks (0)
int i;
for(i=0; i<100; i++)
{
      i = i;
}
本来想用上面这样的循环来延迟时间,结果,在gcc用 -O3 编译以后,这个“无用循环”被优化掉了。再试了试
int i, j;
for(i=0; i<100; i++)
{
      j = i*i;
}
不行,还是被优化掉了。最后只能这样:
int i, j;
for(i=0; i<100; i++)
{
      j = i*i;
}

if(j > 1000)
......

j现在变成了“循环后还要用到的变量”,这样,gcc就无法认出这是无用循环了。

看来 gcc -O3 还是很厉害的。
      看linux内核很容易被struct address_space 这个结构迷惑,它是代表某个地址空间吗?实际上不是的,它是用于管理文件(struct inode)映射到内存的页面(struct page)的;与之对应,address_space_operations 就是用来操作该文件映射到内存的页面,比如把内存中的修改写回文件、从文件中读入数据到页面缓冲等。
      参考下面这张图,摘自《深入理解linux虚拟内存管理》,对理解linux内存管理颇有帮助

linux
      看看这个“ Linux驱动程序开发班 ”,注意第三节“培养对象”——“适用于理工科计算机相关专业失业大学毕业生、企业开发人员和技术经理等....”。
      多明确的定位,“计算机相关专业失业大学毕业生”,自己都找不到工作,还要交几千块钱给培训机构,期望他们能带自己走出“失业”。
      很好,很好。

google earth

| | Comments (0) | TrackBacks (0)
      四年没回家乡了,上上个周末用google earth回忆了一下。


这是车队,在一座山上,一家人刚迁到贵州的时候,就住在大门口旁边的一个值班室里。想起来真艰苦。


我上的小学,在厂办公大楼的对面


我上的中学,在一个小山包上,记不清在操场上打过多少次篮球了。右下角的树林大家都叫“野猪林”,到现在我都不知道为什么。


厂里的大操场,我上小学的时候那里还是一片菜地,后来改成这样,是全厂人晚饭后散步的地方。


后山,小时候玩的最多的地方,郁郁葱葱。有山的地方才有灵气。

      小时候常想:翻过后山,那一面是哪里呢?光思考这个问题都是多么有趣的事,等现在有了google earch,清楚的看到了山后是什么,唉,不过是市中心而已。
     也许,人就是这样,我们发现的越多、知道的越多,就越没有探索带来的乐趣了。
      想当初小学的时候,厂电视台放了《终结者2》,结果第二天大家一上学,几乎所有的男生都在讨论这部超级好看的片子,没有看过的听着我们讲,也后悔死了晚上没看电视。今天看到了《终结者4:救世军》的预告片,个人感觉还不错,很大手笔的样子,但愿不要像《终结者3》一样絮絮叨叨,5月上映,期待一下。