0

ファイル内のデータを操作するための stdio コマンドの使用に問題があります。つまり、ファイルにデータを書き込むと、書き込みが成功したことを示す int が返されますが、それを読み戻すと、古いデータしか取得できません。

コードの簡略版は次のとおりです。

fd = open(filename,O_RDWR|O_APPEND);

struct dE *cDE = malloc(sizeof(struct dE));

//Read present data
printf("\nreading values at %d\n",off);
printf("SeekStatus <%d>\n",lseek(fd,off,SEEK_SET));
printf("ReadStatus  <%d>\n",read(fd,cDE,deSize));

printf("current Key/Data <%d/%s>\n",cDE->key,cDE->data);

printf("\nwriting new values\n");
//Change the values locally 
cDE->key  = //something new
cDE->data = //something new

//Write them back
printf("SeekStatus  <%d>\n",lseek(fd,off,SEEK_SET));
printf("WriteStatus <%d>\n",write(fd,cDE,deSize));

//Re-read to make sure that it got written back
printf("\nre-reading values at %d\n",off);
printf("SeekStatus <%d>\n",lseek(fd,off,SEEK_SET));
printf("ReadStatus  <%d>\n",read(fd,cDE,deSize));

printf("current Key/Data <%d/%s>\n",cDE->key,cDE->data);

さらに、疑問がある場合に備えて、dE 構造体を次に示します。

struct dE {
    int key;
    char data[DataSize];
};

これは以下を出力します:

reading values at 1072
SeekStatus <1072>
ReadStatus  <32>
current Key/Data <27/old>

writing new values
SeekStatus  <1072>
WriteStatus <32>

re-reading values at 1072
SeekStatus <1072>
ReadStatus  <32>
current Key/Data <27/old>
4

1 に答える 1

1

|O_APPEND通話から削除しopenます。

于 2012-10-28T22:44:11.667 に答える