2013-03-12 8 views
1

Я хотел бы знать, сколько файловых дескрипторов я открыл в своем приложении на C++. Можно ли это сделать с помощью функции Windows API?Извлечь количество открытых файловых дескрипторов с помощью Windows API

+3

Не могли бы вы уточнить, что вы подразумеваете под «файловыми дескрипторами»? Файл открыт, например. 'fopen' или' _open'? C++ файловые потоки? WIN32 'OpenFile' обрабатывает? –

+1

Кроме того, любой ответ, который вы подсчитаете, будет мгновенно ошибочным, потому что другой поток может открыть или закрыть дескриптор, прежде чем вы сможете действовать в ответ. –

ответ

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; 

    } 

} 
0

Если вы после проверки открытых ручек, то вы можете использовать утилиту Handle от SysInternals.

Смежные вопросы