• 本文转载自http://www.linuxjournal.com/article/4681 

    All programs use memory, even ones that do nothing. Memory misuse results in a good portion of fatal program errors, such as program termination and unexpected behavior.

    Memory ...
  • 作为一个食品专业的本科生我对我们专业是彻底失望了
    想当初 系主任展望 我们专业的美好前景的时候 曾说 "中国的食品行业还是有很大发展空间的" 现在终于知道什么是"发展空间"了 套用师兄的话"中国的很多东西还真不是做给人吃的。从"阜阳大头娃娃"到现在的"三鹿事件",从苏丹红到肝炎病毒矿泉水。我们的食品
    安全课从来不缺素材。几乎每一天上课的时候老师都在爆料,有些是大家都知道的,
    有些是...
  • 本文章转自http://my.donews.com/ben2/2006/02/28/c%E8%AF%AD%E8%A8%80%E4%B8%ADstatic-%E5%8F%98%E9%87%8F/ 

    c语言的static变量用法

  • 2008-10-05

    Life in Shanghai

    http://lh5.ggpht.com/wltongling/SOhwqN5EHYI/AAAAAAAAAFQ/9fsDquF9QEI/s800/IMG_0158.JPGhttp://lh4.ggpht.com/wltongling/SOhuFcm6bwI/AAAAAAAAADw/FqxHxIU5H-c/s800/IMG_0470.JPGhttp://lh5.ggpht.com/wltongling/SOht6TtnptI/AAAAAAAAADk/FOFQArphs7c/s640/IMG_0424.JPGhttp://lh6.ggpht.com/wltongling/SOhuQD45YKI/AAAAAAAAAEY/nUGU3PCRQ6k/s800/IMG_0255.JPGhttp://lh5.ggpht.com/wltongling/SOhuk9iBI7I/AAAAAAAAAEw/fZt6ADVOhhs/s800/IMG_0335.JPGhttp://lh4.ggpht.com/wltongling/SOhuvdeqd-I/AAAAAAAAAFA/IaMMtSYmwd0/s800/IMG_0376.JPG

     上海蛰居数月,略有感想,略有收获, 忽觉时光飞梭,今日之思已不同往日。

     

    TIPs for GOOGLE picasa:
    在用picasa的外链时,google限制必须使用分辨率在800一下的照片,否则不能够正常显示。Google此举也是为了降低他服务器的访问压力。如:http://lh4.ggpht.com/wltongling/SOhuvdeqd-I/AAAAAAAAAFA/IaMMtSYmwd0/s800/IMG_0376.JPG
    上述的S800即为分辨率大小,如果超过800,在外链时应将其改小。

  • 2008-10-05

    文字如锚

    文字像锚一样,拴住记忆之船,以免船在暴风雨中沉没

    好久都没写过文字了,淡去的心情始终没有回味过来。那记录的文字如同逝去的回忆,陈旧了好多,但愿能如老酒,陈而弥香。

  •       徐是华为数据中心的头,技术超级牛人,一级部门总监,华为副总裁,年收入过千万,数据中心用火山岩建的深入 地下的一个大型建筑.防辐射,可防卫星的电子,雷达等手段的侦察.里有象卫星发射中心那种超大屏幕,机房里满是三米的大型服务器和大型计算机.连接整个为 全球的每一台终端,整个华为每天三十多万封邮件,海外和全球的同步研发,内部的信息管理,内部流程,华为的国内国际IP电话都是通过出去.
          上周,我正式提交了离职报告,准备给自己的职业生涯一个很大的转折,这是我长时间的思考最后所做的决定.但真的提出离职后,回想在公司的十年,还是百感交集。。。。
  • 浅析linux2.6.24内核initrd传递给rootfs进行系统加载流程
    『转自』http://blog.chinaunix.net/u1/38994/showart_688271.html


    1.解析有loader传递过来的initrd参数
    start_kernel()->
    setup_arch()->
    parse_tags()->
    使用下面这个函数进行解析:
    static int __init parse_tag_initrd(const struct tag *tag)
    {
        printk(KERN_WARNING "ATAG_INITRD is deprecated; "
            "please update your bootloader.\n");
        phys_initrd_start = __virt_to_phys(tag->u.initrd.start);
        phys_initrd_size = tag->u.initrd.size;
        return 0;
    }
    __tagtable(ATAG_INITRD, parse_tag_initrd);

    2.进一步初始化initrd_start变量
    start_kernel()->
    setup_arch()->
    paging_init()->
    bootmem_init()->
    bootmem_init_node()->
    在该函数中使用下面2个语句将物理地址转为虚拟地址
    #ifdef CONFIG_BLK_DEV_INITRD
        ...
        initrd_start = __phys_to_virt(phys_initrd_start);
        initrd_end = initrd_start + phys_initrd_size;
        ...
    #endif
    3.建立rootfs文件系统,并mount到根目录
    start_kernel()->
    vfs_caches_init()->
    mnt_init()->
    init_rootfs()->位于fs/ramfs/inode.c中,调用register_filesystem(&rootfs_fs_type);注册rootfs
    接下来
    init_mount_tree()函数将调用mnt = do_kern_mount("rootfs", 0, "rootfs", NULL);将rootfs挂在到/根目录下
    然后使用如下两个函数,将后边建立线程的根目录指向rootfs,
    set_fs_pwd(current->fs, ns->root, ns->root->mnt_root);
    set_fs_root(current->fs, ns->root, ns->root->mnt_root);
    4.将initrd(的ramdisk加载到rootfs
    start_kernel()->
    rest_init()->
    kernel_init()->内核线程
    do_basic_setup()->
    do_initcalls()->调用所有arch/arm/kernel/vmlinux.lds.S中定义的INITCALLS模块,比如:使用module_init内建到zImage中的所有驱动模块

    #define pure_initcall(fn)        __define_initcall("0",fn,0)
    #define core_initcall(fn)        __define_initcall("1",fn,1)
    #define core_initcall_sync(fn)        __define_initcall("1s",fn,1s)
    #define postcore_initcall(fn)        __define_initcall("2",fn,2)
    #define postcore_initcall_sync(fn)    __define_initcall("2s",fn,2s)
    #define arch_initcall(fn)        __define_initcall("3",fn,3)
    #define arch_initcall_sync(fn)        __define_initcall("3s",fn,3s)
    #define subsys_initcall(fn)        __define_initcall("4",fn,4)
    #define subsys_initcall_sync(fn)    __define_initcall("4s",fn,4s)
    #define fs_initcall(fn)            __define_initcall("5",fn,5)
    #define fs_initcall_sync(fn)        __define_initcall("5s",fn,5s)
    #define rootfs_initcall(fn)        __define_initcall("rootfs",fn,rootfs)
    #define device_initcall(fn)        __define_initcall("6",fn,6)
    #define device_initcall_sync(fn)    __define_initcall("6s",fn,6s)
    #define late_initcall(fn)        __define_initcall("7",fn,7)
    #define late_initcall_sync(fn)        __define_initcall("7s",fn,7s)

    上面我们关心的是rootfs_initcall定义,
    在init/initramfs.c中具体实现如下:
    rootfs_initcall(populate_rootfs);
    populate_rootfs()会调用下面这个函数将initrd的内容释放到rootfs文件系统下
    unpack_to_rootfs((char *)initrd_start,initrd_end - initrd_start, 0);
    这样initrd的ramdisk的内容全部释放到了rootfs文件系统中,所以ramdisk下的所有目录结构将全部被克隆到rootfs文件系统下,具体unpack_to_rootfs函数的实现流程,以后有时间再研究(gliethttp_20080514)

  • 2008-08-06

    About samba

    以下资料来自于网络 

    转自http://bbs.chinaunix.net/viewthread.php?tid=847367&extra=page%3D1
    可写不可删除的实现: 

    共享目录 To_manager   只有manager这个用户对此目录拥有完全权限。
    其它用户对此目录只有:可向其内复制并新建文件的权限。但是不能删除文件不能copy出文件,不能读文件。


    步骤:
    1。更改smb.conf 如下
    CODE:
    [To_manager]
       comment=To_manager   
       path=/To_manager
       writable=yes
       create mask =1600
       directory mask= 1600

    2。让Linux支持POSIX ACL (这个 POSIX ACL 的功能在 Linux kernel 2.6 上被正式支持,之后又被 back-port
    到 2.4 kernel 上。大家常用的档案系统,如:ext3,xfs,jfs,和 ReiserFS,都能使用
    ACL。当然,大家须要在编译 kernel 时启动 ACL。)

        我们亦可以在 /etc/fstab 中加入选项:
       /dev/sda1 /home ext3 acl 1 2
    如果对POSIX ACL 不熟悉请看http://bbs.chinaunix.net/viewthread.php?tid=760730&highlight=lovegqin

    3。写个小脚本
    CODE:
    #!/bin/bash
    mkdir /To_manager  
    chmod 777 /To_manager  
    chown manager:manager/To_manager   
    chmod o+t /To_manager   
    setfacl -m d:u:manager:rwx /To_manager   


    最后运行脚本,重启smb即可.
  • 转载自maypeng.cublog.cn

    EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。


    Linux symbol export method:

    [1] If we want export the symbol in a module, just use the EXPORT_SYMBOL(xxxx) in the C or H file.
        And compile the module by adding the compile flag -DEXPORT_SYMTAB.
        Then we can use the xxxx in the other module.


    [2] If we want export some symbol in Kernel that is not in a module such as xxxx in the /arch/ppc/fec.c.
        Firstly, define the
    xxxx
    in the fec.c;
        Secondly, make a new file which contain the "extern" define the
    xxxx(for example, extern int xxxx
    );
        Lastly, in the ppc_ksyms.c we includes the new file, and add the EXPORT_SYMBOL(
    xxxx
    ).
        Then we can use the
    xxxx.



    使用时注意事项:
    在使用EXPORT_SYMBOL 的.c文件中 需要 #include <linux/module.h> 文件。
    // 先写函数
    func_a ()
    {

    }
    //再使用EXPORT_SYMBOL
    EXPORT_SYMBOL(func_a);
    注:export出的函数必须为非static函数,且要在相应的.h文件中进行声明。
          在内核中新加入文件时,需要对相应目录下的Makefile进行更改,并且新加入的文件使用的config设置与调用函数文件的config设置同。
  •       还有几个小时就要和这个生活了6年的城市说再见了。在没上大学之前,没住过校,所以刚入学的时候尽管寝室条件不是很好,还是被这个新的集体生活所吸引。那个时候,似乎带着好奇的眼镜,对大学中的每件事情都感到新奇。

    我的过去
          刚入学的那会,辅导员就欺负我们年轻无知,把期末考试说的巨为恐怖--让我们以为考不过天都要塌了,所以一个个都做乖乖仔,考试前期拼命的复习。通宵复习的传统就是那个时候给培养起来的。昨天看了欧洲杯的半决赛,觉得再没有那份精力通宵的去干一件事,或许已经老了。
          本科的日子如流水般淌过,忽然觉得世界变得好大,比以前那个我长大的世界要大了很多。新奇的同时又感到了很多的无奈,也明白了世事不能尽随人意,但求无愧我心的道理。可理明白了,但却没有真的做到无愧我心,很多的事没有去做,很多的遗憾没有去弥补。或许这人生就是一个不断丢弃的过程,一路走一路将自己的幻想给丢掉。每个小孩都是一个天使,但是他们丢掉了幻想之后,他们就只能成为一个凡人。
          还记得金秋艺术节时郭靖的扮相,虽然演的是现代版的可总还是觉得没有找到感觉。一个人骑着车,然后在最后的关头,却不敢去牵那黄蓉的手。于是乎一语成谶,那段戏成了我6年感情生活的缩影,过于保守始终都没有学会放开自己。唯一的不同是我的生活中没有出现那黄蓉似的女主人公,能够不嫌弃我那榆木脑袋,在那微醺的午后上演一场郭黄二人相拥的感人结局。那次戏排完之后,出现了小小的意外,平生第一次感到人的愤怒是很有力量的。不过也因此获得神似基努李维斯的称赞。
          本科过后,研究生阶段并没有想象中的轻松。成堆的项目一下子压了过来,每天都几乎是围着项目转。开始迷茫,也开始思考自己的人生目标应该是什么。突然发现生活有时候是个螺旋形的阶梯,走着走着貌似回到了原点,而又和以前经过的时候有些不同。高度提升了,但最终的终点是什么还是不得而知。只是一个人在拼命的向前冲着。GRE和toefl是以前我都没想过要挑战的,感觉很有成就感,但也有些不值。因为自己做这些事情的时候都是处在一种无意识的状态,还是不知道自己的目标是什么。

    那么未来又是什么呢?
          其实这个命题对于我还说还是难以回答。未来是不确定性的总和,所有的可能。如果上帝是未来的话,那么我会相信的。薛定谔的猫肯定也会同意我的观点。有句话我一直以来很欣赏--在这个社会里,个人得成为自己的教士。不仅如此,由于虔敬的核心意义和持久性,个人还得做自己的诗人、自己的哲学家、自己的君王、自己的人格大教堂的首席建筑师。也许人的终极目标就是让自己成为一个最令自己满意的作品,或许这有些自恋的意味,但实不为过。
          恩,该打理好包裹上路了,朝着未来之路。

    ---May be I don't know the final place to go, but I have my belif.