struct FATEntry entry1;
strcpy(entry1.name, "abc");
entry1.next = 3;
entry1.size = 10;
entry1.mtime = 100;
struct FATEntry entry2;
strcpy(entry1.name, "");
entry1.next = 0;
entry1.size = 0;
entry1.mtime = 0;
struct FATEntry entry3;
strcpy(entry1.name, "foo");
entry1.next = 324;
entry1.size = 3;
entry1.mtime = 434;
file1 = fopen("filesys", "r+b");
fwrite(&entry1, sizeof(struct FATEntry), 1, file1);
fseek(file1,BLOCK_SIZE,SEEK_SET);
fwrite(&entry3, sizeof(struct FATEntry), 1, file1);
fseek(file1,BLOCK_SIZE,SEEK_SET);
fread(&entry2, sizeof(struct FATEntry), 1, file1);
fclose(file1);
所以基本上我在这里尝试的是将entry1写入文件然后寻找512字节(因为那将是一个块),然后将entry3写入文件。但是当我畏惧时,我应该从entry3获取值但是进入entry2但是我在entry2中看到的只是随机数。我做错了什么?
答案 0 :(得分:0)
您需要做的第一件事是检查来自fopen,fwrite,fread,fseek等的返回值。您将开始看到缺少的错误。
您需要了解的一件事是,fseek不会寻求超越文件结尾。因此,如果你从一个空文件和fwrite 40字节开始,然后fseek到512,然后fwrite另外40个字节,第二个写实际上将从字节80开始,而不是512!然后你fseek到512,最后在EOF 80,并尝试fread 40字节。您实际上将读取0字节,因为您在EOF,您的读取缓冲区将包含它以前的任何内容(未初始化的内存?)。