_SH_SECURE和_SH_DENYWR之间有什么区别?

Mor*_*hai 7 c c++ windows file-io winapi

_SH_DENYWR拒绝任何其他尝试打开具有写权限的文件(共享冲突)_SH_SECURE设置安全模式(共享读取,独占写访问)

_SH_SECURE似乎更新,基于这样一个事实,即文档似乎掩盖它或根据你看的位置省略它.几乎没有关于我能在网上找到的网上的信息.

那些有什么不同?

Fré*_*idi 5

的行为_SH_SECURE取决于对/ 的mode参数中请求的访问权限。如果请求读取访问,则映射到。否则,它将映射到(独占访问)。_fsopen()_wfsopen()_SH_SECUREFILE_SHARE_READ0

对比度_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)