• 2009-06-25

    fdevent – 方便的跨平台IO多路复用接口

    Views: 17339 | No Comments

    fdevent是一套方便的跨平台IO多路复用C语言接口, 主要想法来自 epoll 和 lighttpd 的 fdevent, 接口的使用几乎和 epoll 一样.

    示例

    while(1) {
        nfds = fdevents_wait(evs, 1000);
        if(nfds == 0){
            //printf("timeout\n");
            continue;
        }
    
        for(i = 0; i < nfds; i++) {
            fde = evs->events[i];
    
            if(fde->flags & FDEVENT_IN){
                // ...
            }
    
            if(fde->flags & FDEVENT_OUT){
                // ...
            }
        }
    }
    

    项目主页: http://www.ideawu.net/person/fdevent/

    Posted by ideawu at 2009-06-25 16:21:28
  • 2009-05-12

    C 语言常见问题集 (中文)

    Views: 12821 | 2 Comments

    c-faq可以说是全世界c程序员的结晶, 无论对c初学者还是高手, 都非常有帮助, 是需要常备身边的手册. 中文版由孙云(sunyun.s@gmail.com, 1-12章)和朱群英(zhu.qunying@gmail.com, 13-20章、LaTeX 文件编辑)翻译.

    中文版

    网站: http://c-faq-chn.sourceforge.net/
    C 语言常见问题集 HTML 版本(在线阅读)
    HTML 版本下载
    PDF 版本下载

    目录
    1. 前言
    2. 声明和初始化
    3. 结构、联合和枚举
    4. 表达式
    5. 指针
    6. 空 (null) 指针
    7. 数组和指针
    8. 内存分配
    9. 字符和字符串
    10. 布尔表达式和变量
    11. C 预处理器
    12. ANSI/ISO 标准 C
    13. 标准输入输出库
    14. 库函数
    15. 浮点运算
    16. 可变参数
    17. 奇怪的问题
    18. 风格
    19. 工具和资源
    20. 系统依赖
    21. 杂项
    22. 感谢
    文献

    英文版的目录:

    网站: http://c-faq.com/

    目录
    1. Declarations and Initializations
    2. Structures, Unions, and Enumerations
    3. Expressions
    4. Pointers
    5. Null Pointers
    6. Arrays and Pointers
    7. Memory Allocation
    8. Characters and Strings
    9. Boolean Expressions and Variables
    10. C Preprocessor
    11. ANSI/ISO Standard C
    12. Stdio
    13. Library Functions
    14. Floating Point
    15. Variable-Length Argument Lists
    16. Strange Problems
    17. Style
    18. Tools and Resources
    19. System Dependencies
    20. Miscellaneous
    Glossary
    Bibliography
    Acknowledgements

    Posted by ideawu at 2009-05-12 10:52:16
  • 2008-01-29

    关于 C++ 中的函数指针

    Views: 11022 | No Comments

    (只是个人的感情喜好, 可能不适合某些人, 特别是对 C++ 比较有感情的人.) 我终于知道 Linus 为什么会骂 C++ 是狗屎了, 因为它把简单的东西变得复杂了(当然, 它也把某些复杂的东西变简单了).

    #include
    
    class A{
    public:
        void fun();
    };
    
    void A::fun(){
        printf("fun\n");
    }
    
    int main(int argc, char *argv[]){
        A a;
        void (A::*p)() = &A::fun;
        (a.*p)();
        return 0;
    }
    

    这是什么狗屎? 如果这样的话, 函数指针还有实用意义吗? -- 为了调用类中的一个方法, 你竟然需要知道该方法的名称, 所处的类的名称, 以及它的实例的名称, 而且调用的时候还要加上实例的名称(4 个条件)! 这就是真正的狗屎!

    我希望是下面的形式(只需要两个条件: 类实例的名称, 方法的名称):

    void (*p)() = a.fun;
    p();
    

    是的, C# 做到了, 所以 C# 被人称为语法优美的语言.

    Posted by ideawu at 2008-01-29 17:25:00
  • 2007-06-16

    tftpx – TFTP的实现和扩展

    Views: 11036 | 2 Comments

    停止等待机制作为数据传输的基本机制, 是网络编程必须的掌握的技能. TFTP 协议使用基于UDP的停止等待机制来实现文件的可靠传输.

    tftpx 实现和扩展了 TFTP 协议.

    Posted by ideawu at 2007-06-16 14:36:54
  • 2007-03-25

    编译C语言代码

    Views: 16029 | 2 Comments

    一般我们会在某个C语言源码文件(如a.c)中使用"include"指令包含其它的文件(如b.h或者b.c).

    这样设想:
    // file: a.c
    include "b.h"
    //可能有include "b.c"
    //main()

    // file: b.h
    // 函数声明等

    // file: b.c
    include "b.h"
    // 函数定义
    我们可以先把b.c编译为模块b.o
    gcc -c b.c

    然后编译a.c
    gcc a.c b.o

    或者我们在a.c文件中直接包含b.c那么就可以这样编译:
    gcc a.c

    Posted by ideawu at 2007-03-25 22:12:31
|<<<456789101112>>>| 12/12 Pages, 71 Results.