的行为_SH_SECURE
取决于对/ 的mode
参数中请求的访问权限。如果仅请求读取访问,则映射到。否则,它将映射到(独占访问)。_fsopen()
_wfsopen()
_SH_SECURE
FILE_SHARE_READ
0
对比度_SH_DENYWR
,始终映射到FILE_SHARE_READ
。
CRT源代码的相关部分(open.c
在Visual Studio 2010中为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);
}
Run Code Online (Sandbox Code Playgroud)