3

以下に示すように、ファイルを書き込みモードで開いています。

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

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

以下に示すように、ファイルで2つの変数のfrwiteを実行しています(最初の変数は整数で、2番目の変数は文字です):

fwrite(&a,1,sizeof(int),fp);
fwrite(&b,1,sizeof(char),fp);
  1. 2 つの連続する fwrite 操作は互いに上書きしますか?
  2. そうでない場合、2 つの連続した fread 操作で変数に適切に入力できますか

例:

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

連続した fread 操作が行われた場合、y 変数と z 変数は 10 と 'm' の値を保持できますか?

ター

4

2 に答える 2

5

2つの連続したfreadまたはfwriteは、並行して実行されない限り、問題を引き起こさないはずです。

システムは、ファイル*にシークポインタを維持し、連続したfwriteおよびfreads中に正しいデータの書き込みと読み取りが行われるようにします。

詳細については、manページを参照してください。

返品値のセクションに以下が明記されています

 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

いいえ、連続した書き込みは互いに上書きしません。これらは同じファイル記述子で実行され、オペレーティング システムは追跡し、上書きしません。読み取りに関しては、読み取りの間にファイル記述子を閉じない限り、サイズを正しく解析すれば、2 つの読み取りによって変数が正しく設定されます。

于 2012-05-30T05:49:00.413 に答える