將緩沖區數據寫入磁盤
所謂緩沖區,是Linux系統對文件的一種處理方式。在對文件進行寫操作時,並沒有立即把數據寫入到磁盤,而是把數據寫入到緩沖區。如果需要把數據立即寫入到磁盤,可以使用sync函數。用這個函數強制寫入緩沖區數據的的好處是保證數據同步。
函數原型:
int sync(void);
這個函數會對當前程序打開的所有文件進行處理,將緩沖區的內容寫入到文件。函數沒有參數,返回值為0。這個函數一般不會產生錯誤。
頭文件:
#include(unistd.h)
用法:
fd = open(path , O_WRONLY|O_CREAT|O_TRUNC , 0766);
if(fd != -1)
{
printf("opened file %s .\n" , path);
}
else
{
printf("can't open file %s.\n" , path);
printf("errno: %d\n" , errno);
printf("ERR : %s\n" , strerror(errno));
}
write(fd , s , sizeof(s));
sync(); //將緩沖區的數據寫入磁盤
printf("sync function done.\n");
close(fd);
fsync
函數fsync的作用是將緩沖區的數據寫入到磁盤。與sync不同的是,這個函數可以指定打開文件的編號,執行以後會返回一個值。
函數原型:
int fsync(int fd);
頭文件:
#include(unistd.h)
返回值:如果函數執行成功則返回0,否則返回-1。
fd = open(path , O_WRONLY|O_CREAT|O_TRUNC , 0766);
if(fd != -1)
{
printf("opened file %s .\n" , path);
}
else
{
printf("can't open file %s.\n" , path);
printf("errno: %d\n" , errno);
printf("ERR : %s\n" , strerror(errno));
}
write(fd , s , sizeof(s));
if(fsync(fd) == 0)
{
printf("fsync function done.\n");
}
else
{
printf("fsync function failed.\n");
}
close(fd);