专栏中心

EEPW首页 > 专栏 > 嵌入式Linux:格式化I/O

嵌入式Linux:格式化I/O

发布人:美男子玩编程 时间:2024-07-29 来源:工程师 发布文章

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


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


格式化输出函数

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;}


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


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


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: 嵌入式 Linux

相关推荐

嵌入式看门狗如何提升系统稳定性

意法半导体出厂中国制造的STM32 MCU

RK3576 + ROS2 SLAM建图与导航实战

华清远见嵌入式在线视频教程——4、基于ARM的嵌入式开发

视频 2008-07-14

linux入门精华

TI将边缘AI微控制器更深入地融入嵌入式设计

ARM 开发板使用手册 在三星 S3C2410开发板上烧写linux

FFT公司9200的板子的资料

U-BOOT 与 MontaVista Linux 的移植

未来倾向于UFS用于高性能嵌入式闪存

从COM到SMARC再到OSM:嵌入式计算模块的发展

华清远见嵌入式在线视频教程——1、走近嵌入式系统

视频 2008-07-08

IAR 扩展了嵌入式开发平台,提供 LTS 服务

彻底告别486:Linux内核维护者正式移除英特尔486处理器支持

米尔亮相德国嵌入式展2026 Embedded World

Linux就AI生成代码定下规则:允许Copilot类工具、拒绝劣质AI代码,错误由人类负责

更多 培训课堂
更多 焦点
更多 视频

技术专区