Нужна помощь с F_NOCACHE в Mac - PullRequest
1 голос
/ 22 декабря 2009

Я Шриниваса Рагхаван и новичок в этой группе.

Я столкнулся с проблемой отсутствия кэширования файла. код выглядит следующим образом:

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 не работает должным образом, и все время я получаю только кэшированное сообщение. Прошивка всегда будет обновлять значение «x» в sample.bin.

приведенный выше код работает, если я помещаю весь материал (open, fcntl, read и close) в неопределенный цикл (занимает много времени), как показано ниже

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

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

Я действительно застрял с этим на неделю, я хочу знать точное поведение F_NOCACHE, и любая информация будет высоко оценена.

Заранее спасибо, Шриниваса Рагхаван

1 Ответ

5 голосов
/ 21 января 2010

Это не то, для чего это. F_NOCACHE сообщает системе, что вы не ожидаете прочтения этих данных * с диска в ближайшее время, поэтому не стоит беспокоиться о кешировании.

* Да, «данные» во множественном числе, я знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...