注册 登录
编程论坛 Linux系统管理

一小例说明 O_SYNC 标志(fcntl , write)

madfrogme 发布于 2012-08-18 12:08, 8380 次点击
Unix 系统中, 通常write()函数只是将数据排入队列,

而实际的写磁盘操则可能在以后的某个时刻进行,

数据库系统很可能需要使用 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");
}


如果是要关闭某标志的话则是

val &= ~flags;

flags反转之后做与操作


[ 本帖最后由 madfrogme 于 2012-8-18 13:30 编辑 ]
0 回复
1