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

嵌入式Linux:格式化I/O

目录

1、格式化输出函数

1.1、printf()函数

1.2、fprintf()函数

1.3、dprintf()函数

1.4、sprintf()函数

1.5、snprintf()函数

2、格式化输入函数

2.1、scanf()函数

2.2、fscanf()函数

2.3、sscanf()函数


在Linux中,格式化I/O(formatted I/O)指的是通过格式化输入输出函数对数据进行读写,这些函数允许你以特定的格式读写数据。

拓展:Linux实现标准输入和标准输出(STDIN_FILENO和STDOUT_FILENO)

1、格式化输出函数

C 库函数提供了 5 个格式化输出函数,包括:printf()、fprintf()、dprintf()、sprintf()、snprintf()。

1.1、printf()函数

原型int printf(const char *format, ...);

功能:将格式化的字符串输出到标准输出(通常是终端)。

返回值:返回写入的字符数(不包括终止的空字符),如果出错则返回负值。

示例

#include <stdio.h>int main() {int age = 30;printf("Age: %d\n", age);return 0;
}

1.2、fprintf()函数

原型int fprintf(FILE *stream, const char *format, ...);

功能:将格式化的字符串输出到指定的文件流。

返回值:返回写入的字符数(不包括终止的空字符),如果出错则返回负值。

示例

#include <stdio.h>int main() {FILE *file = fopen("output.txt", "w");if (file != NULL) {fprintf(file, "Hello, file!\n");fclose(file);} else {perror("Failed to open file");}return 0;
}

1.3、dprintf()函数

原型int dprintf(int fd, const char *format, ...);

功能:将格式化的字符串输出到指定的文件描述符。

返回值:返回写入的字符数(不包括终止的空字符),如果出错则返回负值。

示例

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>int main() {int fd = open("output.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);if (fd != -1) {dprintf(fd, "Hello, dprintf!\n");close(fd);} else {perror("Failed to open file");}return 0;
}

1.4、sprintf()函数

原型int sprintf(char *str, const char *format, ...);

功能:将格式化的字符串输出到字符串缓冲区。

返回值:返回写入的字符数(不包括终止的空字符),如果出错则返回负值。

示例

#include <stdio.h>int main() {char buffer[100];int age = 30;sprintf(buffer, "Age: %d", age);printf("%s\n", buffer);return 0;
}

1.5、snprintf()函数

原型int snprintf(char *str, size_t size, const char *format, ...);

功能:将格式化的字符串输出到字符串缓冲区,最多写入size个字符。

返回值:返回要写入的字符数,如果返回值大于等于size,则表示输出被截断。

示例

#include <stdio.h>int main() {char buffer[10];int age = 30;snprintf(buffer, sizeof(buffer), "Age: %d", age);printf("%s\n", buffer);return 0;
}

2、格式化输入函数

C 库函数提供了 3 个格式化输入函数,包括:scanf()、fscanf()、sscanf()。

2.1、scanf()函数

原型int scanf(const char *format, ...);

功能:从标准输入读取格式化数据。

返回值:成功匹配和赋值的输入项数,如果遇到错误或到达文件末尾,则返回负值。

示例

#include <stdio.h>int main() {int age;printf("Enter your age: ");scanf("%d", &age);printf("You entered: %d\n", age);return 0;
}

2.2、fscanf()函数

原型int fscanf(FILE *stream, const char *format, ...);

功能:从指定的文件流读取格式化数据。

返回值:成功匹配和赋值的输入项数,如果遇到错误或到达文件末尾,则返回负值。

示例

#include <stdio.h>int main() {FILE *file = fopen("input.txt", "r");if (file != NULL) {int age;fscanf(file, "%d", &age);printf("Age from file: %d\n", age);fclose(file);} else {perror("Failed to open file");}return 0;
}

2.3、sscanf()函数

原型int sscanf(const char *str, const char *format, ...);

功能:从字符串缓冲区读取格式化数据。

返回值:成功匹配和赋值的输入项数,如果遇到错误或到达字符串末尾,则返回负值。

示例

#include <stdio.h>int main() {const char *input = "30";int age;sscanf(input, "%d", &age);printf("Age from string: %d\n", age);return 0;
}

这些格式化输入输出函数提供了丰富的功能,便于处理各种类型的数据输入输出需求。

使用这些函数时需要特别注意格式化字符串的正确性和缓冲区的大小,以避免缓冲区溢出和其他潜在问题。

http://www.lryc.cn/news/372244.html

相关文章:

  • 【elementui源码解析】如何实现自动渲染md文档-第二篇
  • 热门开源项目OpenHarmony
  • NewspaceAi之GPT使用新体验
  • 详解红黑树
  • 探索JavaScript逆向工程与风控等级
  • C++ 22 之 立方体案例
  • vue2使用antv/g6-editor实现可拖拽流程图
  • springboot学习小结
  • vue聊天发送Emoji表情
  • 360数字安全:2024年4月勒索软件流行态势分析报告
  • 【MySQL】日志详解
  • MyBatis 延迟加载,一级缓存,二级缓存设置
  • Linux 基本指令2
  • 联邦学习的基本流程,联邦学习权重聚合,联邦学习权重更新
  • React保姆级教学
  • 数据结构和矩阵细节用法:double、cell和complex #matlab
  • 12. Django 第三方功能应用
  • UnityWebRequest获取本地txt文件,其中中文乱码问题(踩坑记录)
  • 轮到国产游戏统治Steam榜单
  • 不想搭集群,直接用spark
  • 【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。
  • Scikit-learn 基础教程:机器学习的初步指南
  • 开源WebGIS全流程常用技术栈
  • 前端开发之HTTP协议认识
  • 力扣刷题总结 -- 数组26
  • 无线MODBUS通讯模块在供水系统中的应用
  • linux为什么不是实时操作系统
  • 【STM32】飞控设计
  • MSPM0G3507——引脚分布图
  • MySQL CDC