[英]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.