独家成交量

时间:2016-05-17 01:26:10

标签: c windows winapi stdio createfile

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

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

我可以在&#34;共享模式下打开一个音量&#34;与fopen:

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

我可以打开一个文件&#34;专属&#34;打开:

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

但是,如果我尝试打开一个音量,它将会失败:

#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完成的东西,或者我错过了 什么?

1 个答案:

答案 0 :(得分:0)

根据the standard

  如果将O_RDWR应用于FIFO

,则

结果未定义

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

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

或者:

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

或者:

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