我面临着这个奇怪的问题,我很清楚可以解决这个问题,但是我正在这里寻找替代方案。每当我以“ a +”模式打开文件时,如果我先读取文件,然后使用fprintf()写入文件,便可以使用fread()进行读取。相反,如果我先写入文件然后再读取文件,则会在输出中得到空白值。 我不想在每次写入后都使用fclose()FILE指针fp,因为我正在执行类似write-> read-> write-> read ....... n次迭代的操作。
是否有实现此目的的最佳方法?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <poll.h>
#include <linux/input.h>
int main(){
FILE * fp;
fp = fopen("myback.txt", "a+");
char buf[10];
fprintf(fp, "checking");
fread (buf,1,4,fp);
buf[4] = '\0'; //buf has read n bytes
printf("%s \n", buf);
return 0;
}
答案 0 :(得分:2)
在更新模式(
'+'
)中,可以同时执行输入和输出,但是如果没有对fflush
,fseek
,{{1} }或fsetpos
,并且除非有输入操作遇到文件结尾,否则在不介入rewind
,fseek
或fsetpos
的情况下,输入之后不能输出。在更新模式下,即使指定了文本模式,也允许实现使用二进制模式。
因此,您不能彼此直接进行读写,必须显式设置或重置每个输入和输出功能之间的文件位置。