huangya90 发表于 2012-10-27 20:07

关于内核缓冲区的问题

本帖最后由 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;
}

rongpmcu 发表于 2012-10-28 17:35

回复 1# huangya90
你是怎么验证的? 不停的去cat file吗? 有可能cat读到的也只是buffer里面的数据


   

asdf2110 发表于 2012-10-29 17:30

open 加上 O_SYNC 选项,则 write 时直接 sync,不需要显示的调用 fsync 等了
或者加上 O_DIRECT,直接写磁盘也可以,只是 O_DIRECT 要求 buffer 地址,len和 offset 都是 对齐的

huangya90 发表于 2012-10-29 19:15

回复 2# rongpmcu
是不停的cat file。请问你有什么方法验证吗?

   

rongpmcu 发表于 2012-10-29 21:32

回复 4# huangya90
如果你是用虚拟机的话,你可以在程序停止前,直接强制关闭虚拟机


   
页: [1]
查看完整版本: 关于内核缓冲区的问题