zoukankan      html  css  js  c++  java
  • 标准I/O缓冲:全缓冲、行缓冲、无缓冲

    说明:我只网络资源整合,简单易学~。~

    操作流程最后呼吁read或write功能I/O操作。为了使程序的效率最高。Stream对象通常提供缓冲。为了减少呼叫系统I/O库函数的数量。

    基于流I/O提供以下3种缓冲:

    全缓冲:直到缓冲区被填满。才调用系统I/O函数。对于读操作来说,直到读入的内容的字节数等于缓冲区大小或者文件已经到达结尾。才进行实际的I/O操作,将外存文件内容读入缓冲区;对于写操作来说,直到缓冲区被填满,才进行实际的I/O操作,缓冲区内容写到外存文件里。磁盘文件一般是全缓冲的。

    行缓冲:直到遇到换行符'/n',才调用系统I/O库函数。对于读操作来说。遇到换行符'/n'才进行I/O操作,将所读内容读入缓冲区;对于写操作来说。遇到换行符'/n'才进行I/O操作,将缓冲区内容写到外存中。

    因为缓冲区的大小是有限的,所以当缓冲区被填满时,即使没有遇到换行符'/n',也相同会进行实际的I/O操作。标准输入stdin和标准输出stdout默认都是行缓冲的。

    无缓冲:没有缓冲区,数据会马上读入或者输出到外存文件和设备上。标准出错stderr是无缓冲的。这样保证错误提示和输出可以及时反馈给用户,供用户排除错误。

    以上3种缓冲区分别定义为3个宏,其定义例如以下表所看到的。

    缓冲区类型

       

    全缓冲

    _IOFBF

    行缓冲

    _IOLBF

    无缓冲

    _IONBF

    在使用上表所述的缓冲类型宏时,应将文件流对象中的缓冲区标志与该宏做"与"操作,推断结果是否为0就可以知道该缓冲文件流的缓冲区是否属于该类型了。

    详细样例參考 http://hi.baidu.com/hp_roc/blog/item/47eedcef85e2b7dfb31cb19e.html

    几个退出函数:

    1、exit ()。

    调用exit函数之后。它首先会运行一系列的清理处理,包含调用运行各终止处理程序。关闭全部标准IO流等,然后进入内核。

    2、_exit ()。与exit不同的是,它不进行清理工作而直接进入内核。

    此函数由POSIX.1说明,放在unistd.h里面。

    3、_Exit ()。相同,它也不进行清理工作而直接进入内核。此函数跟exit一样由ISO C说明,放在stdlib.h里面。

    对于退出函数对于缓冲区冲洗的效果以这个链接谈到更具体:

    http://blog.csdn.net/seton040/archive/2009/08/31/4504825.aspx

  • 相关阅读:
    'Undefined symbols for architecture i386,clang: error: linker command failed with exit code 1
    The codesign tool requires there only be one 解决办法
    XCode iOS project only shows “My Mac 64bit” but not simulator or device
    Provisioning profile XXXX can't be found 的解决办法
    UIView 中的控件事件穿透 Passthrough 的实现
    Xcode4.5出现时的OC新语法
    xcode 快捷键(持续更新)
    打越狱包
    php缓存与加速分析与汇总
    浏览器的判断
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4591790.html
Copyright © 2011-2022 走看看