我可以通过将dwShareMode设置为0来使用CreateFile“专用”打开一个卷:

#include <windows.h>
int main() {
  HANDLE ki = CreateFile("\\\\.\\F:", GENERIC_READ | GENERIC_WRITE, 0,
    NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
}


我可以使用fopen在“共享模式”下打开卷:

#include <stdio.h>
int main() {
  FILE* ki = fopen("\\\\.\\F:", "r+b");
}


我可以通过打开“独家”打开文件:

#include <stdio.h>
#include <fcntl.h>
int main() {
  int ju = open("lima.txt", O_RDWR | O_EXCL);
  FILE* ki = fdopen(ju, "r+b");
}


但是,如果我尝试用open打开一个卷,它将失败:

#include <stdio.h>
#include <fcntl.h>
int main() {
  int ju = open("\\\\.\\F:", O_RDWR | O_EXCL);
  FILE* ki = fdopen(ju, "r+b");
}


测试之后,无论是否带有O_EXCL标志,都会发生这种情况。是独家量
打开只能通过CreateFile完成的操作,否则我会丢失
什么东西

最佳答案

根据the standard


  如果将O_RDWR应用于FIFO,则结果不确定


在这种情况下,似乎将一个卷识别为FIFO。修理:

open("\\\\.\\F:", O_RDONLY);


要么:

open("\\\\.\\F:", O_WRONLY);


要么:

open("\\\\.\\F:", O_RDONLY | O_WRONLY);

10-04 13:38