tags:

views:

174

answers:

1

Hello Everybody,

I am Srinivasa Raghavan and new to this group.

I am facing problem with non caching the file. the code looks like the below:

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")
}

the problem was, the F_NOCACHE doesn't not work properly, and all the time I get the message cached only. The firware will always update the value 'x' in sample.bin.

the above code works if I put the entire stuff (open, fcntl, read and close) in an indefinite loop (take long time to come out) like the below.

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

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

I am really stuck with this for a week time, I want to know the exact behaviour of F_NOCACHE, and any information will be highly appreciated.

Thanks in advance, Srinivasa Raghavan

+1  A: 

That's not what it's for. F_NOCACHE tells the system that you don't expect to read that data* off the disk again any time soon, so it shouldn't bother caching it.

*Yes, "data" is plural, I know.

dave