灿的CreateFile()在两个不同的线程在同一时间打开一个文件
-
21-09-2019 - |
题
罐的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“的
因为它正被另一个进程无法访问该文件
的过程“。)
如果我canot共享打开该文件,那么什么是使用FILE_SHARE_WRITE | FILE_SHARE_READ
感谢名单
The program environment is Win32 Vs2003
解决方案
文件句柄是总是线程之间共享。所有你需要做的仅仅是使用手柄正常,但两个线程。
因为你要求更多的访问,CreateFile()
,比你允许共享访问您对GENERIC_ALL
第二调用失败,FILE_SHARE_WRITE | FILE_SHARE_READ
。
如果你不是只要求GENERIC_READ | GENERIC_WRITE
,它会成功。
在CreateFile()
行为将是相同的,如果你把它在一个单一的主题。
不隶属于 StackOverflow