3

我有一个以写入模式打开的文件,如下所示:

int a = 10;
char b = 'm';
int y = 0;
char z;

FILE *fp = NULL;
fp = fopen("/config/gps_backup.dat","w");

我正在对文件(第一个是整数,第二个是字符)执行两个变量的 frwite,如下所示:

fwrite(&a,1,sizeof(int),fp);
fwrite(&b,1,sizeof(char),fp);
  1. 两个连续的fwrite操作会互相覆盖吗
  2. 如果没有,两个连续的 fread 操作能否正确填充到我的变量中

例如:

fread(&y,1,sizeof(int),fp);
fread(&z,1,sizeof(char),fp);

如果连续进行 fread 操作,y 和 z 变量能否保持 10 和 'm' 的值。

4

2 回答 2

5

两个连续的 fread 或 fwrite 只要不并行执行就不会造成任何问题。

系统将维护 FILE * 中的查找指针,并确保您在连续的 fwrite 和 freads 期间获得正确的数据写入和读取。

您可以参考手册页了解更多详细信息。

它在返回值部分清楚地说明了以下内容

 The functions fread() and fwrite() advance the file position indicator
 for the stream by the number of bytes read or written.  They return the
 number of objects read or written.  If an error occurs, or the end-of-
 file is reached, the return value is a short object count (or zero).
于 2012-05-30T06:00:01.783 回答
1

不,连续写入不会相互覆盖。它们在同一个文件描述符上执行,操作系统保持跟踪并且不会覆盖。至于读取,只要您在读取之间不关闭文件描述符,两次读取就会正确地填充您的变量,前提是您正确解析了大小。

于 2012-05-30T05:49:00.413 回答