gpt4 book ai didi

c - Fflush 文件

转载 作者:行者123 更新时间:2023-12-02 09:07:18 24 4
gpt4 key购买 nike

有来自 cplusplus.com site 的简单代码

#include <stdio.h>

char mybuffer[80];

int main() {
FILE *pFile;
pFile = fopen("example.txt","r+");
if (pFile == NULL)
perror("Error opening file");
else {
fputs("test",pFile);
fflush(pFile); // flushing or repositioning required
fgets(mybuffer, 80, pFile);
puts(mybuffer);
fclose(pFile);
return 0;
}
}

我想知道 fflushfile 作为其参数的情况下到底做了什么,就像上面的代码一样,因为有和没有 结果是相同的fflush(pFile) line - 空缓冲区(输出中没有任何内容)。

PS:我在 Linux gcc (6.3.0) 上运行代码

最佳答案

来自 C18 标准:

7.21.5.3 the fopen function

Synopsis

#nclude <stdio.h>
FILE *fopen(const char * restrict filename,
const char * restrict mode);

Description

...

7 When a file is opened with update mode (+ as the second or third character in the above list of mode argument values), both input and output may be performed on the associated stream. However, output shall not be directly followed by input without an intervening call to the fflush function or to a file positioning function (fseek, fsetpos, or rewind), and input shall not be directly followed by output without an intervening call to a file positioning function, unless the input operation encounters end-of-file. Opening (or creating) a text file with update mode may instead open (or create) a binary stream in some implementations.

以下是发布的代码执行的步骤

  • 文件 example.txt 以读取和更新模式打开。

  • 4 个字节(文本)写入文件,覆盖文件的前 4 个字节。

  • 流缓冲区通过 fflush() 刷新,允许模式从写入更改为读取。这就是注释所指的内容://需要刷新或重新定位

  • 程序切换到读取模式而不更改位置,并尝试从文件中的位置 4 读取最多 79 个字节,并在换行符处停止。如果无法读取任何字节,则返回NULL

  • 该行输出到标准输出。但请注意,如果文件包含 4 个字节或更少,fgets(mybuffer, 80, pFile) 会失败并返回 NULL,留下数组 mybuffer处于未确定的状态,导致 puts(mybuffer); 具有未定义的行为。

  • 文件已关闭

关于c - Fflush 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56546651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com