可以利用下面的代码做一下相关实验:
[C++] 纯文本查看 复制代码
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE fh;
TCHAR String[] = _T("Hello, world."), c; //Buffer[8] = _T("12345678"), c;
int command;
OVERLAPPED ov = {0, 0, 0, 0, NULL};
DWORD nRead = 0, nWrite = 0;
if (argc < 2) {
_tprintf (_T("No file name and command"));
exit (EXIT_FAILURE);
}
//command = _ttoi(argv[2]);
fh = CreateFile (argv[1], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (fh == INVALID_HANDLE_VALUE) {
_tprintf (_T("Cannot open file\\n"));
exit (1);
}
_tprintf (_T("\\nType any character to release the share lock"));
_tscanf (_T("%c"), &c);
_tprintf (_T("Ok, exit now\\n"));
return 0;
}
在上面代码中,会按照你设定的模式去打开一个文件,它等待你按下任意键后程序退出,所以可以利用这个停歇的时间对第 3 个参数,即 dwShareMode 赋予不同值进行测试。
当 dwShareMode 为 0 时,不允许其它进程读,写,删除该文件。比如我此时用 UE 打开 argv[1] 代表的文件,那么会得到提示:
![]()
当 dwShareMode 设为 FILE_SHARE_READ 时,其它进程不能写该文件,只能读取。同样用 UE 来测试写入并保存时会发现:
![]()
同样可以测试 FILE_SHARE_WRITE 和 FILE_SHARE_DELETE 的情况。 |