IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Linux Socket 学习笔记16-套接口上的标准I/O

    Qiang发表于 2009-08-01 10:07:24
    love 0

    采用标准的I/O可以增强程序的可移植性,可以提高程序的性能.

    fdopen(3)可以为套接口打开stdio(3)调用.

    #include
    FILE fdopen(int files,const char *mode);

    files为文件描述符,mode为打开的模式.与函数fopen中的模式一样.
    如果调用成功返回一个FILE结构指针,否则返回一个空指针,错误信息在errno中.

    下面是一个示例:

    ?View Code C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    int s;
    FILE *io;
    s=socket(...);
    io=fdopen(s,"w+");
    if(io==NULL)
    {
    fprintf(stderr,"%s:fdopen\n",strerror(errno));
    exit(1);
    }

    一般情况下为了让程序更加安全个高效,常常采用分开使用读写流的方式.

    下面是一个示例:

    ?View Code C
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    int s;
    FILE *rx;//读流
    FILE *wx;//写流
    s=socket(...);
    rx=fdopen(s,"r");
    if(rx==NULL)
    {
    ........
    }
    wx=fdopen(dup(s),"r");
    if(wx==NULL)
    {
    ........
    }

    建立两个流后,用户就可以安全的在rx流上使用fgetc()和fgets()等输入函数,在wx流上使用fputc()和fpuuts()等输出函数.
    当不再使用时就调用fclose()关闭这些流.



沪ICP备19023445号-2号
友情链接