写io的几种模式

本文介绍了三种常见的IO操作模式:bufferwrite、directwrite 和 write+sync。bufferwrite模式下,数据先写入操作系统缓存,再由系统决定何时回写;directwrite模式绕过操作系统缓存直接写入存储介质;write+sync模式则确保数据同步到非易失性存储中,增加了数据安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写io的几种模式

  1. buffer write
    特点:
    a) 应用程序写入到page cache
    b) 操作系统 writeback
    优缺点:
    a) 大部分情况直接写内存,速度很快
    b) 数据完整性无法得到严格保证
    c) 小部分写入受到系统回写影响,服务质量没有办法保证
  2. direct write
    特点:
    a) 绕过操作系统cache,直接写介质
    b) 规避了page cache的使用,不受操作系统回写的影响
    c) 介质有可能有cache,不能绝对安全
  3. write + sync
    特点:
    a) 写入数据调用 sync or fsync
    b) sync返回后数据已经成功写入磁盘介质并足够安全
    c) 在调用sync前写入的数据有可能丢失
    d) 随着操作系统内存的使用情况不同, sync等待的时间也会不同
  4. O_SYNC
    特点:
    a) 用户 sync或者O_SYNC
    b) 操作系统将数据写入存储: direct write或者page cache回写
    c) 操作系统指示存储介质将数据写入非易失介质: flush或者write barrier
### IO口的几种输出关系 #### 推挽输出 (Push-Pull Output) 推挽输出是一种常见的IO口配置方式,在这种结构中,上下两个开关分别用于控制高低电平。当需要输出高电平时,上部开关导通而下部开关断开;反之亦然。这种方式能够提供较强的高低电平驱动能力[^1]。 对于推挽输出而言,其主要特点在于: - 高低电平均有良好的驱动性能; - 不适合与其他不同电平状态下的同类型接口直接连接以免造成损坏; - 可通过关闭两路开关进入高阻抗模式实现输入功能转换; - 常见于AVR单片机等设备之中,并且通常会默认采用此类工作模式来执行对外设的操作[^2]。 ```c // 设置GPIO为推挽输出模式的例子(STM32 HAL库) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_MODE_OUTPUT_PP); ``` #### 开漏/集电极开路 输出 (Open Drain/Open Collector Output) 相比之下,开漏或集电极开路形式只具备单一方向上的主动拉低操作路径——即仅能有效地下拉至接地电压水平。为了获得逻辑'1', 外部需额外接入一个适当大小的上拉电阻到电源端子上来完成整个电路回路形成过程中的正向偏置条件满足需求。 这类输出具有如下特性: - 主动状态下只能拉低电位; - 对外部干扰具有一定免疫力; - 支持多主控共享总线通信协议如I²C; ```c // 设置GPIO为开漏输出模式的例子(STM32 HAL库) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_MODE_OUTPUT_OD); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值