Menu Home

linux c清理系统文件缓存—— posix_fadvise

OS : opensuse11.4

需求:判断磁盘是否存在,不想搞的很复杂也不想用写的方式来确定磁盘的存在,所以就想用读的方式来确定,但是呢,系统有cache,所有即使在拔去硬盘的情况下依然能读到文件,尝试了O_SYNC O_DIRECT对read都无效,搞了整1天,汗流浃背,找啊找啊,用posix_fadvise可以达到目的。有别的简单方法的,求指教。
ps : 一个好工具vmtouch
代码示例:

int clear_file_cache(const char* filename)
{
    struct stat st;
    int fd;
    if(stat(filename, &st) < 0)
    {
        perror("stat error!");
        return -1;
    }
    fd = open(filename, O_RDONLY);
    if(fd < 0)
    {
        perror("open error!");
        return -1;
    }
    if(posix_fadvise(fd, 0, st.st_size, POSIX_FADV_DONTNEED) != 0)
    {
        perror("posix_fadvise error!");
        return -1;
    }
    else
        printf("clear cache OK!\n");
    return 0;
}

 

Categories: C/C++ linux

Tagged as:

lnmcc