需要协助fseeking

时间:2013-05-07 22:50:53

标签: c block fseek

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

1 个答案:

答案 0 :(得分:0)

您需要做的第一件事是检查来自fopen,fwrite,fread,fseek等的返回值。您将开始看到缺少的错误。

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