2009-12-22 91 views
1

我是Srinivasa Raghavan,並且是該組的新成員。在mac中使用F_NOCACHE需要幫助

我面臨非緩存文件的問題。 代碼看起來像下面:

main() 
{ 
    int fd; 
    char buf[512] = {'\0'}; 
    fd = fopen("Sample.bin",O_RDONLY); 

    fcntl(fd, F_NOCACHE, 1); 
    fcntl(fd, F_RDAHEAD, 1); 

    read(fd, buf, sizeof(buf)); 
    close(fd); 

    if(buf[0] == 'x') 
     print("non-cached\n"); 
    else 
     printf("cached\n") 
} 

的問題是,在F_NOCACHE不會無法正常工作,而我得到的消息的時間只有緩存。 firware將始終更新sample.bin中的值'x'。

上面的代碼工作,如果我把整個東西(開放,fcntl,讀取和關閉)在一個無限循環(需要很長時間出來)像下面。

main() 
{ 
    while(1) 
    { 
     open... 
     fcntl(.., F_NOCACHE) 
     read(.... 
     close.. 

     if(buf[0] == 'x') 
      break; 
    } 
} 

我真的堅持了一個星期的時間,我想知道F_NOCACHE的確切行爲,任何信息將高度讚賞。

由於提前, 斯里尼瓦沙拉加

回答

5

這不是什麼它是。 F_NOCACHE告訴系統,你不希望在任何時候再次讀取該數據*,所以它不應該緩存它。

*是的,「數據」是複數,我知道。