gpt4 book ai didi

CreateFile() 可以在两个不同的线程中同时打开一个文件吗

转载 作者:太空狗 更新时间:2023-10-29 15:21:03 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com