作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
CreateFile()可以在两个不同的线程中同时打开一个文件吗
void new_function(void * what)
{
HANDLE h = CreateFile("c:\\tmp", GENERIC_ALL,FILE_SHARE_WRITE |
FILE_SHARE_READ , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (h == INVALID_HANDLE_VALUE)
{
DWORD d = GetLastError();
return ;
}
Sleep(10000);
int main()
{
HANDLE h = CreateFile("c:\\tmp", GENERIC_ALL,FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
Sleep(10000);
return 1;
每次它在 GetLastError
位置退出。并且错误是 ERROR_SHARING_VIOLATION
(32, "The进程无法访问该文件,因为它正被另一个进程使用过程。”)
如果我无法共享打开文件,那么FILE_SHARE_WRITE | 有什么用? FILE_SHARE_READ
谢谢
程序环境为Win32 Vs2003
最佳答案
文件句柄总是在线程之间共享。您需要做的只是像往常一样在两个线程上使用句柄。
您对 CreateFile()
的第二次调用失败,因为您请求的访问权限 GENERIC_ALL
超过允许的共享访问权限 FILE_SHARE_WRITE | FILE_SHARE_READ
。
如果您只请求 GENERIC_READ | GENERIC_WRITE
,它会成功。
如果您在单个线程上调用 CreateFile()
行为将是相同的。
关于CreateFile() 可以在两个不同的线程中同时打开一个文件吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1576187/
我是一名优秀的程序员,十分优秀!