_SH_DENYWR 拒绝以写权限打开文件的任何其他尝试(共享违规) _SH_SECURE 设置安全模式(共享读,独占写访问)
_SH_SECURE 似乎较新,因为文档似乎掩盖了它或忽略了它,具体取决于您查看的位置。我在网上几乎找不到任何信息。
它们有什么不同?
最佳答案
_SH_SECURE
的行为取决于 mode
中请求的访问权限_fsopen()
的参数/_wfsopen()
.如果请求仅 读取权限,则_SH_SECURE
映射到 FILE_SHARE_READ
.否则,它映射到 0
(独家访问)。
对比度 _SH_DENYWR
,总是映射到FILE_SHARE_READ
.
CRT源码的相关部分(Visual Studio 2010中的open.c
的第269-301行)如下:
/*
* decode sharing flags
*/
switch ( shflag ) {
case _SH_DENYRW: /* exclusive access */
fileshare = 0L;
break;
case _SH_DENYWR: /* share read access */
fileshare = FILE_SHARE_READ;
break;
case _SH_DENYRD: /* share write access */
fileshare = FILE_SHARE_WRITE;
break;
case _SH_DENYNO: /* share read and write access */
fileshare = FILE_SHARE_READ | FILE_SHARE_WRITE;
break;
case _SH_SECURE: /* share read access only if read-only */
if (fileaccess == GENERIC_READ)
fileshare = FILE_SHARE_READ;
else
fileshare = 0L;
break;
default: /* error, bad shflag */
_doserrno = 0L; /* not an OS error */
*pfh = -1;
_VALIDATE_RETURN_ERRCODE(( "Invalid sharing flag" , 0 ), EINVAL);
}
关于c++ - _SH_SECURE 和 _SH_DENYWR 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9738960/