一小例说明 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 编辑 ]