嵌入式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, ...);

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

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

示例

cpp 复制代码
#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, ...);

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

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

示例

cpp 复制代码
#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, ...);

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

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

示例

cpp 复制代码
#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, ...);

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

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

示例

cpp 复制代码
#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,则表示输出被截断。

示例

cpp 复制代码
#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, ...);

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

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

示例

cpp 复制代码
#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, ...);

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

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

示例

cpp 复制代码
#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, ...);

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

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

示例

cpp 复制代码
#include <stdio.h>

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

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

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

相关推荐
诚信爱国敬业友善几秒前
GUI编程(window系统→Linux系统)
linux·python·gui
sekaii1 分钟前
ReDistribution plan细节
linux·服务器·数据库
YH_DevJourney1 小时前
Linux-C/C++《C/8、系统信息与系统资源》
linux·c语言·c++
威哥爱编程1 小时前
Linux驱动开发13个实用案例
linux
去看日出1 小时前
Linux(centos)系统安装部署MySQL8.0数据库(GLIBC版本)
linux·数据库·centos
qq_448941082 小时前
10、k8s对外服务之ingress
linux·容器·kubernetes
D-river2 小时前
【如何基于Debian构建Kali Linux】
linux·网络·安全·网络安全
楼台的春风2 小时前
PWM(脉宽调制)技术详解:从基础到应用实践示例
c语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式
年轮不改3 小时前
ARM-Linux 基础项目篇——简单的视频监控
linux·arm开发
程序员JerrySUN4 小时前
树莓派 4B:AI 物联网完整部署方案
linux·人工智能·嵌入式硬件·物联网·分类·数据挖掘