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

Sha*_*ang 4 c winapi createfile

可以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);
Run Code Online (Sandbox Code Playgroud)

}

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;
Run Code Online (Sandbox Code Playgroud)

}


每次它退出该GetLastError位置.并且错误是ERROR_SHARING_VIOLATION(32,"进程无法访问该文件,因为它正由另一个进程使用.")

如果我canot共享打开文件,那么有什么用 FILE_SHARE_WRITE | FILE_SHARE_READ

感谢名单

The program environment is Win32 Vs2003

Hea*_*utt 10

文件句柄始终在线程之间共享.您需要做的只是正常使用句柄,但是在两个线程上.

您的第二次呼叫CreateFile()失败是因为您要求更多访问权限,GENERIC_ALL而不是允许共享访问权限FILE_SHARE_WRITE | FILE_SHARE_READ.

如果你只是请求GENERIC_READ | GENERIC_WRITE,它会成功.

CreateFile()行为将是相同的,如果你把它在单个线程.