我寫了一個簡短的C程序來打開和關閉unix文件緩衝。下面的代碼是打開它。我使用fcntl來獲取設置,設置O_SYNC標誌,然後將設置寫回到內核。但是當我再次獲得設置時,它們的O_SYNC標誌未設置。fcntl:打開和關閉磁盤緩存
int result, s;
s = fcntl(*fd, F_GETFL);
s |= O_SYNC; // set SYNC bit
result = fcntl(*fd, F_SETFL, s);
if(result == -1)
perror("setting SYNC");
else
{
// Check buffering is on
s = fcntl(*fd, F_GETFL); //
if((s & O_SYNC) == O_SYNC) // check if SYNC bit is set
printf("In function buffering_off(): Buffering is OFF\n");
else
printf("In function buffering_off(): Buffering is ON\n");
}
任何幫助,將不勝感激。乾杯:)
你也應該看看你的內核版本,http://milek.blogspot.de/2010/12/linux-osync-and-write-barriers.html說這個功能只在2.6.31中引入。 – vissi2 2012-04-28 10:28:23