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

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 指针,效果和上面一样,关闭文件才能显示

http://www.xdnf.cn/news/3660.html

相关文章:

  • 正态分布全景解析:理论、推导与应用
  • Linux-sysctl工具解析
  • 《AI大模型应知应会100篇》第44篇:大模型API调用最佳实践(附完整代码模板)
  • GC9D01 和 GC9A01两种TFT 液晶显示驱动芯片
  • Set的局限性
  • C#将Mat或Byte快速转换为Bitmap格式
  • 组件通信-provide、inject
  • maven install时报错:【无效的目标发行版: 17】
  • 多模态大模型轻量化探索-视觉大模型SAM(Segment Anything Model)
  • C++11新特性_标准库_智能指针_std::weak_ptr
  • MATLAB技巧——norm和vecnorm两个函数讲解与辨析
  • Linux的环境变量
  • “会话技术”——Cookie_(2/2)原理与使用细节
  • [更新完毕]2025五一杯C题五一杯数学建模思路代码文章教学:社交媒体平台用户分析问题
  • Linux 信号
  • 反射机制补充
  • 滥用绑定变量导致Oracle实例宕机
  • Python数据结构与算法
  • [面试]SoC验证工程师面试常见问题(一)
  • AE脚本 关键帧缓入缓出曲线调节工具 Flow v1.5.0 Win/Mac
  • 使用 Tesseract 实现藏文OCR
  • 2025eBay母亲节消费图谱:非标商品5倍溢价背后的情感经济革命
  • Codeforces Round 1022 (Div. 2) D. Needle in a Numstack(二分)
  • 深入解析C++11基于范围的for循环:更优雅的容器遍历方式
  • 系统思考与第一性原理
  • sizeof的用途
  • 第 6 篇:AVL 树与 SB 树:不同维度的平衡探索 (对比项)
  • Redis源码阅读(一)跳表
  • P2196 [NOIP 1996 提高组] 挖地雷
  • Dify 安装 使用