嵌入式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;
}

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

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

相关推荐

  1. 嵌入Linux格式化I/O

    2024-06-14 20:38:04       36 阅读
  2. 嵌入24——IO

    2024-06-14 20:38:04       52 阅读
  3. 嵌入Linux:如何进行嵌入Linux开发?

    2024-06-14 20:38:04       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-14 20:38:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-14 20:38:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-14 20:38:04       82 阅读
  4. Python语言-面向对象

    2024-06-14 20:38:04       91 阅读

热门阅读

  1. llama factory 大数据量下训练失败

    2024-06-14 20:38:04       43 阅读
  2. 【AI原理解析】— Meta Llama-3模型

    2024-06-14 20:38:04       41 阅读
  3. 个人 PCB 设计规范

    2024-06-14 20:38:04       27 阅读
  4. SQLServer按照年龄段进行分组查询数据

    2024-06-14 20:38:04       34 阅读
  5. RAID分析及举例

    2024-06-14 20:38:04       38 阅读
  6. Spring boot开启跨域配置

    2024-06-14 20:38:04       32 阅读
  7. 创建型-单例模式(Singleton)

    2024-06-14 20:38:04       33 阅读
  8. [HGAME 2022 week3]Multi Prime RSA(欧拉函数)

    2024-06-14 20:38:04       29 阅读
  9. redis清空list

    2024-06-14 20:38:04       34 阅读
  10. spark mllib 特征学习笔记 (二)

    2024-06-14 20:38:04       39 阅读
  11. C语言经典例题-4

    2024-06-14 20:38:04       28 阅读
  12. 从后端到智能合约开发:需要多久

    2024-06-14 20:38:04       32 阅读
  13. Hash算法、MD5算法、HashMap

    2024-06-14 20:38:04       35 阅读