我是Srinivasa Raghavan,是这个小组的新手。
我遇到了非缓存文件的问题。 代码如下所示:
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”。
如果我把整个东西(open,fcntl,read和close)放在一个不确定的循环中(需要很长时间才能出来),上面的代码就可以工作了。
main()
{
while(1)
{
open...
fcntl(.., F_NOCACHE)
read(....
close..
if(buf[0] == 'x')
break;
}
}
我真的坚持了一个星期,我想知道F_NOCACHE的确切行为,任何信息都将受到高度赞赏。
提前致谢, Srinivasa Raghavan
答案 0 :(得分:5)
这不是它的用途。 F_NOCACHE告诉系统您不希望在不久的将来再次从磁盘上读取该数据*,因此它不应该打扰它。
*是的,“数据”是复数,我知道。