以追加更新模式打开文件后,每次写入文件之前是否需要执行文件定位语句?
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 标准说:
7.21.5.3/6 ... 对文件的所有后续写入都将被强制到当前的文件结尾 ...
和
7.21.5.3/7 ...在没有对文件定位函数的干预调用的情况下,输入不应直接跟随输出...
我认为 7.21.5.3/7 中的shall比 7.21.5.3/6 中的描述强。