两个连续的fwrites操作

时间:2012-05-30 05:45:58

标签: c fwrite fread

我在写入模式下打开了一个文件,如下所示:

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

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

我在文件上做了两个变量(第一个是整数,第二个是字符),如下所示:

fwrite(&a,1,sizeof(int),fp);
fwrite(&b,1,sizeof(char),fp);
  1. 两个连续的fwrite操作是否会相互覆盖
  2. 如果没有,可以将两个连续的fread操作正确填入 我的变数
  3. 例如:

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

    如果连续的fread操作完成,y和z变量可以保持10和'm'的值。

    Tha

2 个答案:

答案 0 :(得分:3)

两个连续的fread或fwrite不应该导致任何问题,只要它们不是并行完成的。

系统将在FILE *中维护搜索指针,并确保在连续的fwrit和fread期间获得正确的数据写入和读取。

您可以参考man page了解更多详情。

它在RETURN VALUES部分明确说明了以下内容

 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).

答案 1 :(得分:1)

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