| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Файлы |
| Автор: Sheff 6.8.2006, 18:50 |
| Народ, а как установить связь между HANDLE'ом на файл, открытым с помощью CreateFile и указателем на файловый поток FILE* Т.е грубо говорят, как переконвертировать HANDLE в FILE* и наоборот ? |
| Автор: Fixin 6.8.2006, 23:46 |
| Напиши письмо в майкрософт и спроси, как в ядре обернут CreateFile для конвертации дескриптора файла в объект FILE*. Или декомпилируй файл msvcrt.dll - и посмотри как там реализована ф-ция fopen. Добавлено @ 23:47 А вообще, можно открыть файл и найти в структурах ядра дескриптор этого файла, но это если для извращенцев. |
| Автор: Sheff 7.8.2006, 00:17 | ||
Fixin, вообще да, похоже стандартного способа не существует, вроде вот это работает для обычных файлов:
Для пайпов не пробовал, но всё-равно это хак |
| Автор: NiJazz 8.8.2006, 15:35 |
| Sheff, уже не первый топик с данной тематикой. Зачем тебе это? |
| Автор: Romikgy 8.8.2006, 15:52 | ||
handle = fileno(stream);
|
| Автор: Sheff 8.8.2006, 16:20 |
| NiJazz, нужно Решение нашёл: функция _open_osfhandle. Romikgy, это не хэндл это номер файла |
| Автор: Romikgy 8.8.2006, 16:26 |
| Sheff, а хендл это что? |
| Автор: Sheff 8.8.2006, 16:32 |
| Romikgy, грубо говоря указатель на объект ядра, в моём случае это файл |
| Автор: Romikgy 8.8.2006, 16:36 |
очень грубо! имхо тогда лучше _get_osfhandle |
| Автор: Sheff 8.8.2006, 16:57 |
| Romikgy, почему очень грубо. HANDLE это void* - т.е указатель, но по нему нельзя обратиться и нельзя разименовать. Видимо винда использует его по-своему, может это какой-нибудь адрес в таблице дескрипторов или ещё что-нибудь, не важно, но это явно не _iobuf::_file. Кстати, где можно прочитать про то что такое HANDLE в действительности ? Интересно стало |
| Автор: dumb 8.8.2006, 17:20 |
| Sheff, http://book.itzero.com/read/microsoft/0507/Microsoft.Press.Microsoft.Windows.Internals.Fourth.Edition.Dec.2004.internal.Fixed.eBook-DDU_html/0735619174/ch03lev1sec2.html#ch03lev3sec16 |
| Автор: Sheff 8.8.2006, 19:10 |
| dumb, спасибо, почитал. Интересно. Жаль что на сайте у sysinternals нет исходника WinObj, очень хотелось бы глянуть |