2010-05-31 70 views
2

一個簡單的問題,但我在我的書中找不到答案。我想讀取一個二進制文件來播種一個隨機數字生成器,但我不希望每次調用該函數時都使用相同的種子爲我的生成器播種,因此我需要爲該文件中的位置保留一個變量(不是一個問題),我需要知道如何讀文件開始一個特定的點(不知道如何)。代碼:C:用起點讀取文件

void rng_init(RNG* rng) { 
    // ... 

    FILE *input = fopen("random.bin", "rb"); 
    unsigned int seed[32]; 
    fread(seed, sizeof(unsigned int), 32, input); 

    // seed 'rng'... 

    fclose(input); 
} 

回答

4

您可以使用ftell()來讀取文件的當前位置,並使用fseek()跳轉到特定位置,例如,

long cur = ftell(f); 
fseek(f, 0, SEEK_START); // jump to beginning 
fread(...) 
fseek(f, cur, SEEK_START); // returning to previous location. 
+0

要注意的是在某些操作系統(OpenVMS的),其來源於FTELL(),轉移到FSEEK(的值)是魔法餅乾,並且不應被檢查或手術。這不適用於像Linux這樣的合理操作系統,其中值是從文件開始處的字節偏移量。 – wallyk 2010-05-31 16:54:45

1

只是fseek之前你看了什麼!

2

您可以使用fseek移動到文件中的隨機位置。

fseek需要第三個參數來說明位置是相對於什麼。

SEEK_SET - the absolute position from the start of the file 
SEEK_CUR - the position relative to where you currently are in the file 
SEEK_END - the position relative to the end of the file