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月上映,期待一下。

关于存档

This page is an archive of entries from 03 2009 listed from newest to oldest.

02 2009 is the previous archive.

04 2009 is the next archive.

Find recent content on the main index or look in the 存档 to find all content.