MST

星途 面试题库

面试题:C语言文件操作之fwrite与缓冲区

在C语言中,使用fwrite函数向文件写入数据时,简述缓冲区机制是如何工作的?假设我们有一个结构体 `struct Data { int num; char str[20]; }`,现在要将10个这样的结构体实例写入文件,代码如下: ```c #include <stdio.h> struct Data { int num; char str[20]; }; int main() { FILE *file = fopen("test.bin", "wb"); struct Data dataArray[10]; // 假设已初始化dataArray fwrite(dataArray, sizeof(struct Data), 10, file); fclose(file); return 0; } ``` 如果在调用fwrite后,不调用fclose,数据是否一定已经写入文件?为什么?
13.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 缓冲区机制在fwrite中的工作原理
    • 在C语言标准I/O库中,fwrite函数用于向文件写入数据。当调用fwrite时,数据并不会立即直接写入物理文件。
    • 标准I/O库会在内存中维护一个缓冲区(通常大小为系统默认的缓冲区大小,例如4096字节等)。fwrite函数首先将数据写入这个缓冲区。
    • 当缓冲区被填满(达到缓冲区容量),或者调用fflush函数(强制刷新缓冲区),又或者调用fclose函数关闭文件时,缓冲区中的数据才会被真正写入到物理文件中。
  2. 关于不调用fclose数据是否一定写入文件
    • 如果在调用fwrite后不调用fclose,数据不一定已经写入文件。
    • 原因是,如上述缓冲区机制所述,fwrite只是将数据写入了内存中的缓冲区,而非直接写入文件。在没有满足缓冲区刷新条件(缓冲区满、调用fflush、调用fclose)的情况下,数据仍然停留在缓冲区中,并没有被真正写入物理文件。只有当满足这些条件之一时,缓冲区的数据才会被写入文件。所以不调用fclose时,数据不一定已经写入文件。