当前位置: 首页 > news >正文

52、【OS】【Nuttx】【OSTest】setvbuf 测试

背景

接上篇 blog
51、【OS】【Nuttx】【OSTest】参数解析:参数处理过程
已经分析完参数解析功能,下面来看下一个测试项

CONFIG_STDIO_DISABLE_BUFFERING

CONFIG_STDIO_DISABLE_BUFFERING 用于控制标准输入输出(stdio)的缓冲行为
当该配置项被启用时,所有的 IO 操作会直接作用于底层设备,而不会通过缓冲区延迟处理,通常用于实时性高或低延迟的场景,比如实时数据采集,交互式程序输出同步等
当没有定义该配置项时,将执行 setvbuf 测试
在这里插入图片描述

setvbuf

setvbuf 是 C 标准库中的一个函数,用于控制文件流的缓冲方式, 以允许程序在打开文件流后设置或更改流的缓冲模式缓冲区,对需要精确控制输入输出行为的程序来说很有用,比如当需要确保数据尽快写入文件或者当需要优化读取性能时。

函数定义如下
在这里插入图片描述

下面逐段来看 setvbuf 的描述

  • setvbuf 必须在文件流(stream)与某个打开的文件关联,并且在对该流执行其他操作之前调用
  • 如果已经对流进行了其他操作(比如读写),再调用 setvbuf() 会失败
  • _IOFBF:全缓冲,数据在缓冲区满时写入设备,或显式调用 fflush 函数,或关闭文件时写入,
    适用于文件操作
  • _IOLBF:行缓冲,数据在遇到换行符(\n)时写入设备,通常用于交互式终端(如标准输入输出流)
  • _IONBF:无缓冲,所有操作立即生效,不经过缓冲区,适用于需要实时输出的场景
  • 如果 buffer 非空,则使用用户提供的缓冲区,size 参数指定该缓冲区的大小
  • 如果 buffer 为空,则 setvbuf() 会自动分配一个缓冲区,大小由 size 参数决定
  • 缓冲区内容在任何时候都是未定义的(用户不应该依赖缓冲区的数据)

setvbuf_test

下面来看 setvbuf 的测试项

Test NO buffering

在这里插入图片描述
第一个测试项,测试 _IONBF,首先打开文件流 stream,设置 _IONBF 后,此时 fprintf 数据到 stream,/dev/console 将立即显示出来

Test FULL buffering

在这里插入图片描述
测试 _IOFBF,此时没有传入缓冲区指针,系统默认分配出 64 字节的缓冲区,此时 fprintf 将数据 “setvbuf_test: Using default FULL buffering\r\n” 输入到缓冲区,由于此时内容还没到 64 字节,此时终端并不会输出内容,只有当调用 fclose 时,终端才有内容输出

Test FULL buffering, pre-allocated buffer

在这里插入图片描述
同样是测试 _IOFBF,不过此时是通过用户传入了自定义的 buffer 缓冲区,效果和上面用系统默认的一样,关闭文件才能显示

Using LINE buffering

在这里插入图片描述
测试 _IOLBF,由于这里打开的是 /dev/console,终端控制台,所以效果和 _IOFBF 是一样的,需关闭文件才能显示

Test LINE buffering, pre-allocated buffer

在这里插入图片描述

测试 _IOLBF,传入用户定义的 buffer 指针,效果和上面一样,关闭文件才能显示

相关文章:

  • mysql索引及数据库引擎
  • MySQL 第一讲---基础篇 安装
  • 第7篇:RESTful API设计与安全防护
  • 赎金信(简单)
  • 第十六届蓝桥杯 2025 C/C++组 客流量上限
  • 【CTFer成长之路】XSS的魔力
  • 【Java IO流】File类基础详解
  • 瑞萨 EZ-CUBE2 调试器
  • OSPF路由协议配置
  • 变色龙-第16届蓝桥第5次STEMA测评Scratch真题第1题
  • Flowable7.x学习笔记(十七)审批我的待办
  • stm32教程:软件I2C通信协议 代码模板提供
  • day03_ 基本数据类型丶常量丶变量
  • UE自动索敌插件Target System Component
  • Linux_su命令
  • 三类思维坐标空间与时空序位信息处理架构
  • 6.DOS
  • AI编译器对比:TVM vs MLIR vs Triton在大模型部署中的工程选择
  • 自动化测试项目1 --- 唠嗑星球 [软件测试实战 Java 篇]
  • 百度后端开发一面
  • 申活观察|人潮涌动成常态,豫园为何常来常新?
  • 融创中国清盘聆讯延至8月25日,清盘呈请要求遭到部分债权人反对
  • 出口管制不能将民用技术泛安全化,也不能破坏全球供应链稳定
  • 全红婵/陈芋汐夺得跳水世界杯总决赛女子双人10米台冠军
  • 魔都眼|买买买,老铺黄金新店开业被挤爆:有人排队5小时
  • 马上评|科学谋划“十五五”,坚定不移办好自己的事