Получение информации open_files - СЛОЖНО, это все равно что тянуть зубы, и если у вас нет срочной необходимости в этом, вам не следует просить «несколько примеров для каждой платформы» просто так. Просто мое мнение, конечно.
Linux и многие системы Unix имеют системную утилиту под названием lsof
, которая находит дескрипторы открытых файлов и прочее. Это достигается путем доступа к /dev/kmem
, который является псевдофайлом, содержащим копию «живой» памяти ядра, то есть рабочее хранилище ядра операционной системы. Естественно, там есть таблицы открытых файлов, а структура памяти с открытым исходным кодом и задокументирована, так что lsof просто нужно заняться этим, найти информацию и отформатировать ее для пользователя.
Документация для глубин Windows, с другой стороны, практически отсутствует, и я не знаю, что структуры данных как-то подвержены внешним воздействиям. Я не эксперт по Windows, но если Windows API явно не предоставляет такую информацию, она может просто быть недоступна.
Все, что доступно, вероятно, используется утилитами Марка Руссиновича SysInternals; первым приходит на ум FileMon. Глядя на это может дать вам некоторые подсказки. Обновление: Мне только что сообщили, что SysInternals Handles.exe еще ближе к тому, что вы хотите.
Если вам удастся понять это, хорошо; в противном случае вас может заинтересовать отслеживание операций открытия / закрытия файлов по мере их появления: Windows API предлагает щедрую кучку так называемых хуков: http://msdn.microsoft.com/en-us/library/ms997537.aspx. хуки позволяют запрашивать уведомление при возникновении определенных событий в системе. Я считаю, что есть один, который скажет вам, когда программа & ndash; общесистемная & ndash; открывает файл Таким образом, вы можете создать свой собственный список файлов, открытых на время прослушивания ваших хуков. Я не знаю наверняка, но я подозреваю, что это может быть то, что делает FileMon.
Доступ к API Windows, включая функции перехвата, можно получить из C. Перехватчики всей системы потребуют от вас создания DLL для загрузки вместе с вашей программой.
Надеюсь, что эти советы помогут вам начать работу.