2013-03-12 67 views
1

我想知道我在C++应用程序中打开了多少个文件描述符。这可以使用Windows API函数完成吗?使用Windows API检索打开的文件描述符的数量

+3

请问您是否可以详细说明“文件描述符”的含义?由例如打开的文件'fopen'或'_open'? C++文件流? WIN32'OpenFile'处理? – 2013-03-12 09:54:54

+1

此外,您计算的任何答案都会立即错误,因为另一个线程可以打开或关闭句柄,然后才能对答案采取行动。 – 2013-03-13 08:15:36

回答

1

您可以在使用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; 

    } 

} 
相关问题