而实际的写磁盘操则可能在以后的某个时刻进行,
数据库系统很可能需要使用 O_SYNC, 这样一来,
当它从write() 返回时就知道数据已确实写到磁盘上了,
以免在系统崩溃时产生数据丢失。
比如调用在write()之前调用
set_fl( STDOUT_FILENO, O_SYNC );
来打开同步写标志。
void set_fl(int fd, int flags) 的实现如下
程序代码:
void set_fl(int fd, int flags) {
int val;
if( ( val = fcntl ( fd, F_GETFL, 0) ) < 0 )
err_sys( "fcntl F_GETFL error" );
val |= flags; /* turn on flags */
if( fcntl(fd, F_SETFL, val) < 0)
err_sys("fcntl F_SETFL error");
}
int val;
if( ( val = fcntl ( fd, F_GETFL, 0) ) < 0 )
err_sys( "fcntl F_GETFL error" );
val |= flags; /* turn on flags */
if( fcntl(fd, F_SETFL, val) < 0)
err_sys("fcntl F_SETFL error");
}
如果是要关闭某标志的话则是
val &= ~flags;
flags反转之后做与操作
[ 本帖最后由 madfrogme 于 2012-8-18 13:30 编辑 ]