QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 716|回复: 4

关于锁类型的转换

[复制链接]
发表于 2004-4-2 09:05:05 | 显示全部楼层 |阅读模式
static inline int flock_translate_cmd(int cmd) {
#ifdef MSNFS
        if (cmd & LOCK_MAND)
                return cmd & (LOCK_MAND | LOCK_RW);
#endif
        switch (cmd &~ LOCK_NB) {
        case LOCK_SH:
                return F_RDLCK;
        case LOCK_EX:
                return F_WRLCK;
        case LOCK_UN:
                return F_UNLCK;
        }
        return -EINVAL;
}
请问,上面这段程序中,switch(cmd&~LOCK_NB)是将cmd中的LOCK_NB位清0吗,该位是什么意思,起到什么作用?多谢!
发表于 2004-4-2 12:08:25 | 显示全部楼层
LOCK_NB表示nonblocking.那个与非的意思应该比较简单吧。
我想大概意思是这样吧:
LOCK_NB用在老式的BSD风格的flock函数中,但现在其它的UNIX兼容系统用fcntl.这样,两种文件操作标志就要进行转换。因为在现在的文件标志位中,nonblocking不在LOCK_NB(=4)这个位置,所以要屏蔽。整个函数就是进行老式的标志位与新标准之间的转换。具体对应是:共享锁--读锁,排它锁--写锁,解锁--解锁(根据名字来,实际意义当然一样了)
各标志的定义用grep搜一搜吧。
完全是个人意见,很可能不准确,请见谅。
回复

使用道具 举报

 楼主| 发表于 2004-4-2 13:54:18 | 显示全部楼层

thanks

多谢sagaeon的帮助,让我又多学到一些知识。你是不是对文件锁比较熟悉,我最近为了解决Linux操作系统删除文件时会产生孤文件问题,想增加一个删除锁。你认为如果再增加一个锁的话,都有哪些方面需要注意的呢,我担心自已会漏掉一些东西,再指点我一下,谢了!
回复

使用道具 举报

发表于 2004-4-2 15:29:07 | 显示全部楼层
对不起,我对这个问题也不太了解(我甚至不知道什么叫删除锁)。
在网上用关键词搜吧,许多论坛和邮件列表都有相关讨论。
回复

使用道具 举报

 楼主| 发表于 2004-4-3 17:00:15 | 显示全部楼层
:-) 谢了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 16:44 , Processed in 0.091784 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表