簡體   English   中英

如何在C中打開和讀取文件而不進行緩沖?

[英]How to open and read file without buffering in C?

我想對運行在文件上的算法進行基准測試。 該算法迭代N輪,並且在每一輪中,它讀取一個數據塊,做一些神奇的東西並設置下一個塊的偏移量。

這是偽代碼:

int run_algorithm(int offset) {

    char *fname = "database.dat";
    fd = open(fname, O_RDONLY);

    // read the desired block to memory
    block_size = 1024 * 1024;
    char *buf = malloc(block_size);
    lseek(fd, offset, SEEK_SET);
    read(fd, &buf, block_size);

    int new_offset;
    // do magic stuff with buf
    // and set a new offset

    close(fd);
    return new_offset;
}

int main() {

    int i;

    //init offset
    int offset = 0;

    // iterate N times
    for (i = 0; i < N; i++) {
        offset = run_algorithm(offset);
    }

    return 0;
}

我知道操作系統有熱緩存和冷緩存。 我想實現冷緩存案例。 在每次run_algorithm()調用中,文件打開時都不應該有緩沖。 換句話說,我不希望操作系統將文件的一部分存儲在內存中以加速open()和seek()。

有沒有辦法專門設置open()和seek()而不進行緩沖?

您無法在硬盤驅動器和操作系統中禁用alll緩存。

但是,如果您接受對程序之外的所有內容進行基准測試,則可以在C運行時庫中禁用緩沖:

setvbuf(fd, NULL, _IONBF, 0);

您必須在fopen操作后立即調用該函數。 請參閱cpp參考頁面中的詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM