gpt4 book ai didi

c - 在 append/更新模式下是否仍然需要调用文件定位功能?

转载 作者:行者123 更新时间:2023-12-04 10:12:37 25 4
gpt4 key购买 nike

append update方式打开文件后,是否需要在每次写入文件前执行文件定位语句?

FILE *h;
int ch;
if ((h = fopen("data", "a+")) == NULL) exit(1);
if (fseek(h, 0 SEEK_SET)) exit(2);
ch = fgetc(h); /* read very first character */
if (ch == EOF) exit(3);

/* redundant? mandatory? */
fseek(h, 0, SEEK_END); /* call file positioning before output */

/* add 1st character to the end of file on a single line*/
fprintf(h, "%c\n", ch);

C11 Standard说:

7.21.5.3/6 ... all subsequent writes to the file to be forced to the then current end-of-file ...

7.21.5.3/7 ... input shall not be directly followed by output without an intervening call to a file positioning function ...

我认为 7.21.5.3/7 中的比 7.21.5.3/6 中的描述更强。

最佳答案

在可移植的 C 中可能不是多余的。虽然底层文件描述符将始终 append (至少在 Unix 上),但 fseek/fflush 要求的要点是获取在写入输出之前摆脱输入缓冲区,以便可以使用相同的缓冲区进行读取和写入。据我所知,您甚至不需要查找文件末尾,您可以任何地方查找,只要您查找即可。

第二个描述比第一个强,但这是可以预料的。第一个只说明所有 写入到 EOF,即没有办法写入其他任何地方。第二条规定了从读取切换到写入必须伴随刷新或查找的规则,以确保缓冲区的读取和写入方面不会混淆。

关于c - 在 append/更新模式下是否仍然需要调用文件定位功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13212603/

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