Linux标准I/O库汇总整理

Linux标准I/O库(Standard I/O Library)是C标准库的一部分,提供了一系列用于文件输入输出的高级接口。这些接口通常比低级别的系统调用更易于使用,但也可能带来额外的性能开销。下面是Linux标准I/O库的汇总整理,包括常见的API及其用途:

标准I/O概述

标准I/O库通过使用缓冲区来提高读写操作的效率,同时也提供了一些高级功能,如格式化输入输出。标准I/O操作通常使用FILE类型的结构体,该结构体包含了文件的内部状态和指向缓冲区的指针。

标准I/O函数

文件流操作

  • 打开文件

    • fopen(const char *path, const char *mode): 打开或创建文件流。
    • freopen(const char *path, const char *mode, FILE *stream): 重新定向一个流。
  • 关闭文件

    • fclose(FILE *stream): 关闭文件流。
  • 刷新缓冲区

    • fflush(FILE *stream): 刷新流的缓冲区。
  • 判断文件结束

    • feof(FILE *stream): 测试是否到达文件末尾。
    • ferror(FILE *stream): 测试是否有错误发生。
  • 清理错误标志

    • clearerr(FILE *stream): 清除错误和文件结束标志。
  • 文件定位

    • fseek(FILE *stream, long offset, int whence): 移动文件位置指示器。
    • ftell(FILE *stream): 获取当前文件位置指示器的位置。
    • rewind(FILE *stream): 重置文件位置指示器到文件开头。
  • 文件状态

    • fstat(int filedes, struct stat *buf): 获取文件的状态。
    • fstatfs(int filedes, struct statfs *buf): 获取文件系统的状态。

输入输出操作

  • 读取文件

    • fgetc(FILE *stream): 从文件读取一个字符。
    • fgets(char *str, int n, FILE *stream): 从文件读取一行字符串。
    • fread(void *ptr, size_t size, size_t nmemb, FILE *stream): 从文件读取数据块。
  • 写入文件

    • fputc(int c, FILE *stream): 向文件写入一个字符。
    • fprintf(FILE *stream, const char *format, ...): 格式化输出到文件。
    • fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream): 向文件写入数据块。
  • 格式化输入输出

    • fscanf(FILE *stream, const char *format, ...): 从文件读取格式化数据。
    • fprintf(FILE *stream, const char *format, ...): 向文件写入格式化数据。
  • 读写标准输入输出

    • stdin, stdout, stderr: 标准输入、标准输出、标准错误流。

示例代码

以下是一个简单的示例,展示如何在 Linux 系统上使用 C 语言的标准I/O库打开文件、读取内容、然后关闭文件:

复制代码
1#include <stdio.h>
2
3int main() {
4    FILE *file;
5    char filename[] = "example.txt";
6    char buffer[1024];
7
8    // 打开文件
9    file = fopen(filename, "r");
10    if (file == NULL) {
11        fprintf(stderr, "无法打开文件: %s\n", filename);
12        return EXIT_FAILURE;
13    }
14
15    // 读取文件内容
16    while (fgets(buffer, sizeof(buffer), file) != NULL) {
17        printf("%s", buffer);  // 输出每一行
18    }
19
20    // 关闭文件
21    fclose(file);
22
23    return 0;
24}

注意事项

  • 在进行文件操作时,务必检查函数的返回值以确保操作成功。
  • 使用文件后记得及时关闭,以释放系统资源。
  • 对于二进制文件,应使用 fopen"rb""wb" 模式。
  • 在处理大文件时,考虑使用缓冲或分块读取以提高效率。
  • 跨平台编程时要注意不同操作系统之间的 API 差异。

标准I/O库提供了非常方便的文件操作接口,适用于大多数文件处理任务。然而,在需要更高性能或更细粒度控制的情况下,可以考虑使用低级别的系统调用,如open, read, write, 和 close等。

相关推荐
西阳未落3 小时前
C语言中的内存函数(memcpy, memmove, memcmp, memset)
c语言·开发语言
知星小度S4 小时前
系统核心解析:深入操作系统内部机制——进程管理与控制指南(一)【进程/PCB】
linux·运维·服务器·进程
axban5 小时前
QT M/V架构开发实战:QFileSystemModel介绍
开发语言·qt·架构
钢门狂鸭7 小时前
关于rust的crates.io
开发语言·后端·rust
Lionel_SSL8 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
技术猿188702783518 小时前
PHP 与 WebAssembly 的 “天然隔阂”
开发语言·php·wasm
薄荷撞~可乐8 小时前
C#Task(Api)应用
开发语言·c#
范纹杉想快点毕业9 小时前
ZYNQ PS 端 UART 接收数据数据帧(初学者友好版)嵌入式编程 C语言 c++ 软件开发
c语言·笔记·stm32·单片机·嵌入式硬件·mcu·51单片机
Empty_7779 小时前
SELinux安全上下文
linux·服务器·安全
bug攻城狮10 小时前
解决Ubuntu中apt-get -y安装时弹出交互提示的问题
linux·运维·ubuntu