摘要:
可以调用posix_fadvise函数来设置一些操作文件的方式,比如要清楚一定区域内的缓存可以使用下面代码:int main(){ int fd = open("test", O_RDWR); int ret = posix_fadvise(fd, 0, 10, POSIX_FADV_DONTNEED); printf("%d\n", ret); if(ret == -1){ printf("posix_fadvise调用失败!\n"); } close(fd); return 0;}调用该函数后内核会把所指定的范围从页面缓冲区回收, 阅读全文
摘要:
mmap的好处:和read、write系统调用相比不会产生无关的副本;如果不出错就不会有系统调用、操作环境切换等开销;不再需要lseek调用。mmap的坏处:内存映射总是PAGESIZE的整数倍,会浪费一定的内存;如果要映射的内容非常大的时候可能找不到连续的线性地址空间;创建并维护内核相关数据结构,这部分可能抵消双重副本节省下的开销,尤其是大型频繁访问的文件。下面是一个文件映射比较全面的例子:int main(){ //取得页大小 //int pagesize = sysconf(_SC_PAGESIZE); int pagesize = getpagesize(); ... 阅读全文
摘要:
epoll使得时间监听器的注册与实际的事件监视工作脱钩,有三种系统调用:初始化epoll的上下文;将要查看的文件描述符加入上下文(或移除);实际执行时间等待。#include <stdio.h>#include <fcntl.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/uio.h>#include <sys/epoll.h>#include <m 阅读全文
摘要:
include <stdio.h>#include <fcntl.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/uio.h>int main(){ int fd = open("test", O_RDWR); char *buf[] = {"abcdefg\n", "abcdefgh\n", "a 阅读全文