在Mac中使用F_NOCACHE需要帮助

时间:2009-12-22 10:54:47

标签: macos gcc

我是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

1 个答案:

答案 0 :(得分:5)

这不是它的用途。 F_NOCACHE告诉系统您不希望在不久的将来再次从磁盘上读取该数据*,因此它不应该打扰它。

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