2009-12-22 71 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告诉系统,你不希望在任何时候再次读取该数据*,所以它不应该缓存它。

*是的,“数据”是复数,我知道。