使用Windows API检索打开文件描述符的数量

4

我想知道在我的C++应用程序中有多少个文件描述符已经被打开。这是否可以使用Windows API函数来完成?


3
你能详细解释一下你所说的"文件描述符"是什么意思吗?是由fopen_open函数打开的文件吗?还是指C++文件流或WIN32中的OpenFile句柄? - Some programmer dude
1
此外,您计算的任何答案都将立即变得错误,因为另一个线程可以在您对答案做出反应之前打开或关闭句柄。 - Raymond Chen
2个回答

4

您可以使用GetFileType查询进程中每个句柄的信息。

      DWORD type_char = 0, 
      type_disk = 0, 
      type_pipe = 0, 
      type_remote = 0, 
      type_unknown = 0,
      handles_count = 0;

GetProcessHandleCount(GetCurrentProcess(), &handles_count);
handles_count *= 4;
for (DWORD handle = 0x4; handle < handles_count; handle += 4) {
    switch (GetFileType((HANDLE)handle)){
        case FILE_TYPE_CHAR:
            type_char++;
            break;
        case FILE_TYPE_DISK:
            type_disk++;
            break;
        case FILE_TYPE_PIPE: 
            type_pipe++;
            break;
        case FILE_TYPE_REMOTE: 
            type_remote++;
            break;
        case FILE_TYPE_UNKNOWN:
            if (GetLastError() == NO_ERROR) type_unknown++;
            break;

    }

}

在句柄序列中,有些可能是无效/关闭的,这些不会被句柄计数器所统计,因此需要修改程序以继续循环计算有效句柄。对于一些有效的句柄,GetFileType返回错误。 - sercxjo

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接