标题:一小例说明 O_SYNC 标志(fcntl , write)
只看楼主
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
 问题点数:0 回复次数:0 
一小例说明 O_SYNC 标志(fcntl , write)
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 编辑 ]
搜索更多相关主题的帖子: write 
2012-08-18 12:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-379711-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.994385 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved