关于内核缓冲区的问题
本帖最后由 huangya90 于 2012-10-27 20:08 编辑以下是apue的原话:
我查了下update系统守护进程没有,我用的内核版本是3.2.0.我写了个程序,想验证是否是每隔30秒冲洗内核缓冲区,但write系统调用好像是立即写入磁盘。程序如下,请大牛指正。#include <stdio.h>
#include <fcntl.h>
int
main(int argc, char *argv[] )
{
char str[] = "abcdefghijklmn";
int i, fd;
fd = open( "/tmp/test", O_WRONLY|O_CREAT, 0744 );
if( fd == -1 ){
perror("open");
exit(1);
}
for( i = 0; i < strlen(str); i++ ){
write( fd, &str, 1 );
sleep(2);
}
close(fd);
return 0;
} 回复 1# huangya90
你是怎么验证的? 不停的去cat file吗? 有可能cat读到的也只是buffer里面的数据
open 加上 O_SYNC 选项,则 write 时直接 sync,不需要显示的调用 fsync 等了
或者加上 O_DIRECT,直接写磁盘也可以,只是 O_DIRECT 要求 buffer 地址,len和 offset 都是 对齐的 回复 2# rongpmcu
是不停的cat file。请问你有什么方法验证吗?
回复 4# huangya90
如果你是用虚拟机的话,你可以在程序停止前,直接强制关闭虚拟机
页:
[1]