C语言——文件IO

目录

 

1、文件IO的概念

1.1、文件IO的原理

1.2、文件IO的实现

1.3、文件IO的优点和缺点

1.4、文件IO的应用

2、系统IO

2.1、系统IO的特点

2.2、系统IO的关键函数

2.3、示例

 3、标准IO

3.1、标准IO的特点

3.2、标准IO的关键函数

3.3、示例

4、小结


 

1、文件IO的概念

        文件IO是指计算机系统之间的数据交换和存储操作,包括读取文件、写入文件、修改文件和删除文件等操作。文件IO是计算机系统中最常见的IO操作之一,它是指计算机系统之间的数据交换和存储操作。

1.1、文件IO的原理

        文件IO的原理是指计算机系统之间的数据交换和存储操作的过程。文件IO的过程可以分为以下几个步骤:

  1. 文件打开:计算机系统打开指定的文件,以便进行读取或写入操作。
  2. 文件读取或写入:计算机系统读取或写入文件中的数据。
  3. 文件关闭:计算机系统关闭指定的文件,以结束文件IO操作。

1.2、文件IO的实现

文件IO的实现是指计算机系统中实现文件IO操作的方式。文件IO的实现可以分为以下几个方面:

  1. 文件系统:计算机系统中文件系统是实现文件IO操作的基础。文件系统负责管理文件的创建、删除、读取和写入等操作。
  2. 文件读写函数:计算机系统中提供了多种文件读写函数,例如 read()、write()、open() 等,用于实现文件IO操作。
  3. 文件IO缓冲区:计算机系统中实现了文件IO缓冲区,以提高文件IO的效率和性能。文件IO缓冲区是指计算机系统中用于存储文件数据的缓冲区。

1.3、文件IO的优点和缺点

文件IO的优点是:

        文件IO操作可以实现数据的存储和交换。
        文件IO操作可以提高计算机系统的效率和性能。
文件IO的缺点是:

        文件IO操作可能会影响计算机系统的性能。
        文件IO操作可能会导致计算机系统的崩溃。

1.4、文件IO的应用

文件IO的应用是指计算机系统中文件IO操作的场景。文件IO的应用包括:

  1. 文件存储:计算机系统中存储数据的文件。
  2. 文件交换:计算机系统中交换数据的文件。
  3. 文件备份:计算机系统中备份数据的文件。
  4. 文件恢复:计算机系统中恢复数据的文件。

2、系统IO

系统I/O直接操作文件描述符,依赖于操作系统提供的系统调用,例如read()write()open()close()等。它是一种低级的、面向字节流的I/O操作,效率较高,但使用起来相对复杂,需要程序员手动管理缓冲区。

2.1、系统IO的特点

  • 效率高,因为它不涉及缓冲区管理的额外开销。
  • 直接操作文件描述符,灵活性强,可以进行更底层的控制。
  • 需要程序员手动管理缓冲区,容易出错,例如忘记关闭文件描述符可能导致资源泄漏。
  • 操作的是字节流,需要程序员自己处理数据格式转换。

2.2、系统IO的关键函数

  • open(const char *pathname, int flags, mode_t mode): 打开文件,返回文件描述符。
  • read(int fd, void *buf, size_t count): 从文件中读取数据。
  • write(int fd, const void *buf, size_t count): 向文件中写入数据。
  • close(int fd): 关闭文件。
  • lseek(int fd, off_t offset, int whence): 改变文件指针的位置。

2.3、示例

读取文件内容并打印到屏幕

#include 
#include 
#include 

int main() {
    int fd = open("my_file.txt", O_RDONLY); // 打开文件,只读模式
    if (fd == -1) {
        perror("open"); // 打印错误信息
        return 1;
    }

    char buffer[1024];
    ssize_t bytes_read;
    while ((bytes_read = read(fd, buffer, sizeof(buffer))) > 0) {
        write(STDOUT_FILENO, buffer, bytes_read); // 写入标准输出
    }

    if (bytes_read == -1) {
        perror("read");
        return 1;
    }

    close(fd); // 关闭文件
    return 0;
}

 3、标准IO

标准I/O是C语言提供的更高层的I/O操作接口,它构建在系统I/O之上,并提供缓冲区管理功能,简化了I/O操作,提高了编程效率。 它使用stdio.h头文件中的函数,例如fopen()fread()fwrite()fclose()等。

3.1、标准IO的特点

  • 易于使用,隐藏了底层细节,程序员无需手动管理缓冲区。
  • 效率相对较低,因为缓冲区管理会带来一定的开销。
  • 提供格式化输入输出功能,例如printf()scanf()
  • 缓冲区可以提高I/O效率,减少系统调用次数。

3.2、标准IO的关键函数

  • fopen(const char *filename, const char *mode): 打开文件。
  • fread(void *ptr, size_t size, size_t nmemb, FILE *stream): 从文件中读取数据。
  • fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream): 向文件中写入据。
  • fclose(FILE *stream): 关闭文件。
  • fprintf(FILE *stream, const char *format, ...): 格式化写入文件。
  • fscanf(FILE *stream, const char *format, ...): 格式化读取文件。
  • printf(const char *format, ...): 格式化输出到标准输出。
  • scanf(const char *format, ...): 格式化输入从标准输入。

3.3、示例

读取文件内容并打印到屏幕

#include 

int main() {
    FILE *fp = fopen("my_file.txt", "r"); // 打开文件,只读模式
    if (fp == NULL) {
        perror("fopen");
        return 1;
    }

    char buffer[1024];
    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        printf("%s", buffer); // 打印到标准输出
    }

    fclose(fp); // 关闭文件
    return 0;
}

4、小结

选择系统I/O还是标准I/O取决于具体的应用场景。如果需要更高的效率和更底层的控制,可以选择系统I/O;如果需要更方便的编程方式和格式化输入输出功能,可以选择标准I/O。 大多数情况下,标准I/O已经足够满足需求。 只有在需要精确控制缓冲区行为或进行高性能的I/O操作时,才需要考虑使用系统I/O。 记住在使用完文件描述符或文件指针后,务必关闭它们,以释放资源。 

 

欢迎指出错误,欢迎交流

 

你可能感兴趣的:(C语言——LInux编程,c语言,网络,开发语言)