Seltsames Problem mit fread, ftell



  • Hi,
    Ich habe folgenden Code:

    for(i = 0; i < 128; i ++){
        fread(&key, sizeof(unsigned int), 1, data);
        fread(&pos, sizeof(unsigned int), 1, data);
        printf("%i @ %i\n", key, pos);
        keyindex[i * 2] = key;
        keyindex[i * 2 + 1] = i * step * 2 * sizeof(unsigned int);
        int j = 0;
        for(j = 0; j < step - 1; j ++){
          fread(&key, sizeof(unsigned int), 1, data);
          fread(&pos, sizeof(unsigned int), 1, data);      
          printf("-- %i,  %i @ %i\n", ftell(data), key, pos);
          fflush(stdout);
        }
    }
    

    Der folgende Ausgabe erzeugt:

    0 @ 0
    -- 24, 1 @ 24
    -- 32, 1 @ 43
    -- 40, 2 @ 67
    -- 48, 3 @ 91
    -- 56, 4 @ 115
    -- 64, 5 @ 139
    -- 72, 5 @ 163
    -- 80, 6 @ 187
    -- 88, 7 @ 211
    -- 96, 8 @ 235
    -- 104, 9 @ 259
    -- 113, 10 @ 283
    -- 121, 11 @ 307
    -- 129, 12 @ 331
    -- 137, 13 @ 355
    -- 145, 14 @ 379
    -- 153, 15 @ 403
    -- 161, 16 @ 427
    -- 169, 17 @ 451
    -- 177, 18 @ 475
    -- 185, 19 @ 499
    -- 193, 20 @ 523
    -- 201, 21 @ 547
    -- 209, 22 @ 571
    -- 217, 23 @ 595
    -- 225, 24 @ 619
    -- 520, 25 @ 643
    -- 4112, 61 @ 1530
    -- 4120, 62 @ 1554
    -- 4128, 63 @ 1578
    -- 4136, 64 @ 1602
    -- 4144, 65 @ 1626
    -- 4152, 66 @ 1650

    Man beachte nun die jeweils erste Zahl pro Zeile, den mit ftell erfassten Filepointer. Obwohl stets 8 Byte (= 2 * sizeof(unsigned int)) gelesen werden, gibt es teilweise Sprünge um mehrere hundert Bytes. Wie ist das zu erklären?

    Ich bin auf dieses seltsame Phänomen im Rahmen einer umfangreicheren Fehlersuche gestossen und vermute nun, dass irgendwo hier der Hund begraben ist.

    Gruss

    Michael



  • Habe mich nochmals ein bisschen in meinem Programm umgeschaut: Habe einige Binär-Files ohne das Attribut "b" geöffnet. Das geht unter Linux problemlos, aber Windows mag es nicht. Somit ist das Problem gelöst.


Anmelden zum Antworten