Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Файлы, Открытые с помощью CreateFile или fopen 
V
    Опции темы
Sheff
Дата 6.8.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



Народ, а как установить связь между HANDLE'ом на файл, открытым с помощью CreateFile и указателем на файловый поток FILE*
Т.е грубо говорят, как переконвертировать HANDLE в FILE* и наоборот ?


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Fixin
Дата 6.8.2006, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Напиши письмо в майкрософт и спроси, как в ядре обернут CreateFile для конвертации дескриптора файла в объект FILE*. Или декомпилируй файл msvcrt.dll - и посмотри как там реализована ф-ция fopen.

Добавлено @ 23:47 
А вообще, можно открыть файл и найти в структурах ядра дескриптор этого файла, но это если для извращенцев.
PM MAIL ICQ   Вверх
Sheff
Дата 7.8.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



Fixin, вообще да, похоже стандартного способа не существует, вроде вот это работает для обычных файлов:
Код

extern _CRTIMP void * __pioinfo[]; 
*(long *)(__pioinfo[0]) = hRead; 
fgets(&buff[0], 255, stdin);

Для пайпов не пробовал, но всё-равно это хак smile


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
NiJazz
Дата 8.8.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Sheff, уже не первый топик с данной тематикой. Зачем тебе это? smile
PM MAIL   Вверх
Romikgy
Дата 8.8.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146




   handle = fileno(stream);
  
Код

typedef struct _iobuf
{
    char*    _ptr;
    int    _cnt;
    char*    _base;
    int    _flag;
    int    _file;////имхо это хендл
    int    _charbuf;
    int    _bufsiz;
    char*    _tmpfname;
} FILE;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Sheff
Дата 8.8.2006, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



NiJazz, нужно smile
Решение нашёл: функция _open_osfhandle.

Romikgy, это не хэндл это номер файла smile


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 8.8.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Sheff, а хендл это что?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Sheff
Дата 8.8.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



Romikgy, грубо говоря указатель на объект ядра, в моём случае это файл


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Romikgy
Дата 8.8.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(Sheff @  8.8.2006,  15:32 Найти цитируемый пост)
грубо говоря указатель на объект ядра,

очень грубо!
имхо тогда лучше _get_osfhandle


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Sheff
Дата 8.8.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



Romikgy, почему очень грубо.
HANDLE это void* - т.е указатель, но по нему нельзя обратиться и нельзя разименовать. Видимо винда использует его по-своему, может это какой-нибудь адрес в таблице дескрипторов или ещё что-нибудь, не важно, но это явно не _iobuf::_file.

Кстати, где можно прочитать про то что такое HANDLE в действительности ? Интересно стало smile


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
dumb
Дата 8.8.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



PM MAIL   Вверх
Sheff
Дата 8.8.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: нет
Всего: 3



dumb, спасибо, почитал. Интересно.
Жаль что на сайте у sysinternals нет исходника WinObj, очень хотелось бы глянуть smile


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0519 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.