0
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 中看到的只是随机数。我究竟做错了什么?

4

1 回答 1

0

您需要做的第一件事是检查 fopen、fwrite、fread、fseek 等的返回值。您将开始看到您遗漏的错误。

您需要了解的一件事是 fseek 不会超过文件结尾。因此,如果您从一个空文件开始并 fwrite 40 字节,然后 fseek 到 512,然后 fwrite 另一个 40 字节,第二次写入实际上将从 80 字节开始,而不是 512!然后您 fseek 到 512,在 EOF 处结束 80 并尝试读取 40 个字节。您实际上将在 EOF 读取 0 个字节,并且您的读取缓冲区将包含以前的任何内容(未初始化的内存?)。

于 2013-05-08T00:08:40.400 回答