次のように read() を呼び出してファイルを読み取った場合:
unsigned char buf[512];
memset(buf, 0, sizeof(unsigned char) * 512);
int fd;
int readcount;
int offset = 10315001; /* file size is 14315504 */
fd = open("myfile", O_RDONLY);
lseek(fd, offset, SEEK_SET);
readcount = read(fd, (void*)buf, 8);
close(fd);
read() は 0 を返しますが、"buf" のメモリは変更されています (もう 0 ではありません)。そして、次のように fread() で同じオフセットと同じファイルを読み取ろうとした場合:
FILE* file;
file = fopen("myfile", "r");
fseek(file, offset, SEEK_SET);
readcount = fread((void*)buf, 8, 1, file);
fclose(file);
fread() も 0 を返しますが、buf は以前と同じです。
read() が失敗した場合、「buf」のメモリ空間を変更するのはなぜですか? それとも私はいくつかの間違いを犯しましたか?
手伝ってくれてありがとう : )
編集: 上記のコードを実行するたびに、「buf」は read() によって同じように変更されました-> 0 から同じ値に。したがって、変更された「buf」はランダムな値ではない可能性がありますか?
編集2:オフセットパラメータは有効です(twalbergに感謝します)。別の有効なオフセットを読み取ると、read()とfread()の両方が成功し、「buf」の結果は同じになります。read() が失敗したときに何が問題なのかを見つける方法はありますか? read() が 0 を返した場合、errno は「エラーなし」です。