| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8380 人关注过本帖
标题:一小例说明 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
快速回复:一小例说明 O_SYNC 标志(fcntl , write)
数据加载中...
 
   



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

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