Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
38 / 32 / 9
Регистрация: 16.07.2012
Сообщений: 70

Маппинг файлов в Win

16.04.2015, 12:03. Показов 940. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Портирую проект из *nix с mmap() в win.
В *nix, mmap() маппирует файл с диска в память страницами размером 4096 байт, т.е если например файл размером например 1кб, в память он маппируется округляясь и заполняясь нулями до 4к.
Пытаюсь сделать тоже самое с CreateFileMapping
C++
1
2
3
4
5
6
7
8
9
// test
HANDLE fd = CreateFile("test.bin", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
// размер тестового файла в данном случае всего 744 байт
// маппирую до 4к
HANDLE h = CreateFileMapping(fd, NULL, PAGE_READONLY | SEC_RESERVE, 0, 4096, NULL); 
if(h == NULL) {
// получаю ERROR_NOT_ENOUGH_MEMORY ??
GetLastError();
}
MSDN говорит что если размер объекта больше размера исходного файла, то он просто увеличивается.
Если вместо файлового дескриптора указать INVALID_HANDLE_VALUE, или размер объекта уменьшить до или меньше размера файла, то всё нормально.
Почему ошибка связана с нехваткой именно места, ну и собственно как это решить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2015, 12:03
Ответы с готовыми решениями:

Не удается переустановить win 7 вместо win XP, сообщение о нехватке файлов и ошибка 0x80070570
Всем доброго времени суток, товарищи ну окажите помощь чем смогёте. В общем принесли комп на переустановку он моросить начал сходу...

Сбилась кодировка файлов при переносе их с Win XP на Win 7
Перешёл на 7-ку.Перенёс с XP файлы, которые создавались с помощью MathType 6.7. Но вот незадача- кирилица в НИЖНЕМ индексе и НЕКОТОРЫЕ...

Перекодирование файлов Win --> DOS
созданная мною небольшая программа создает файлы, которые не открываются некоторым приложением в DOSе (Ошибка: 'Неверный формат данных')......

5
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
16.04.2015, 13:44
Я обычно делаю так -
C++
1
HANDLE mapping = CreateFileMapping( hFile , 0 , PAGE_READONLY , 0 , 0 , 0 ) ;
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.04.2015, 14:42
Чему равен fd на момент вызова CreateFileMapping ?
0
38 / 32 / 9
Регистрация: 16.07.2012
Сообщений: 70
16.04.2015, 16:08  [ТС]
Цитата Сообщение от Убежденный Посмотреть сообщение
Чему равен fd на момент вызова CreateFileMapping ?
0x00000020

Добавлено через 9 минут
Цитата Сообщение от Игорь с++ Посмотреть сообщение
Я обычно делаю так -
C++
1
HANDLE mapping = CreateFileMapping( hFile , 0 , PAGE_READONLY , 0 , 0 , 0 ) ;
Так конечно тоже работает, но там проблема в том, что дальнейшая работа с маппированным файлом специфична, и надо чтобы он его размер был кратен именно 4096 байт, в чем пока вся и запарка.
Можно накостылить с размером, но хотелось бы малой кровью обойтись сохранив всю кросплатформенность.

Добавлено через 35 минут
Меня уже не столько решение интересует, сколько сама невозможность указать размер больше чем размер файла )
Тем более, насколько я понял из MSDN она же этого не запрещает?
И то ли я MSDN не так читаю, то ли я чего-то не понимаю..
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
16.04.2015, 17:01
Цитата Сообщение от Brust Посмотреть сообщение
Меня уже не столько решение интересует, сколько сама невозможность указать размер больше чем размер файла )
это возможно только в том случае, если есть доступ на запись. у вас же PAGE_READONLY
3
38 / 32 / 9
Регистрация: 16.07.2012
Сообщений: 70
16.04.2015, 20:51  [ТС]
Цитата Сообщение от retmas Посмотреть сообщение
это возможно только в том случае, если есть доступ на запись. у вас же PAGE_READONLY
Да, вы правы, в таком случае и исходный файл придется открывать с GENERIC_WRITE для его дозаписи до размера.
P.S. Черт, в MSDN об этом и шла речь, что именно исходный файл будет дописан, я почему-то вдруг решил что это где-то в памяти происходить будет, хотя с чего бы это, когда файл еще даже читать не начали, а только с хендлами работаем )
Благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2015, 20:51
Помогаю со студенческими работами здесь

После обновления Win 8.1 до Win 10, можно ли поставить старую Win 8.1 на другой ПК ?
Имеется лицензия Windows 8.1. которую обновил до Windows 10, можно ли теперь поставить струю Windows 8.1. на другой компьютер ? Если...

Маппинг
Только начал осваивать -не ругайте)Задание первое Промаппить с помощью ADO.Net Entity Framework таблицу User из базы в класс UserInfo. ...

Сбиваются ассоциации файлов Win Prof 8.1
ДОбрый день. У меня странная проблема, начало которой я не отследил. Точнее, их сразу две (пришли одновременно): 1. Сбиваются...

Копирование файлов без win api
Добрый день. Что прошу: Мне нужно выполнить копирование моего (ехе) в определенные директории - папки. Мне подсказали что можно...

win api передача файлов по сети
HELP!!!!!!!!!! Мне нужно название функции передающей и принимающей файл через сокет. Обязательное требование к программе все с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru