Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбираю пример mmap() UNIX, В mmap файл пишется белиберда 
V
    Опции темы
adom
Дата 13.4.2009, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.6.2007

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



Пример с комментариями здесь http://cs.mipt.ru/docs/courses/osstud/11/stud/11-1c.htm
В кратце так:
Код

struct A {
double f;
double f2;
} *ptr, *tmpptr;
...
ptr = (struct A *)mmap(NULL, length, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0);
...
tmpptr = ptr;
for(i = 1; i <=100000; i++){
tmpptr->f = i;
tmpptr->f2 = tmpptr->f*tmpptr->f;
tmpptr++;
}
munmap((void *)ptr, length);

Файл создаётся, но в нём вместо чисел и их квадратов что-то вроде этого
р?р?@@"@@0@@9@@B@@ЂH@ @P@"@@T@$@Y@&@@^@(@b@*@ e@,@Ђh@.@ l@0@p@1@r@2@@t@3@ђv@4@y@5@ђ{@6@@~@7@€Ђ@8@‚@9@€ѓ@:@ …@;@И†@<@Ђ€@=@HЉ@>@ Њ@?Ћ@@@ђ@Ђ@@‘@A@’@ЂA@$“@B@@”@ЂB@d•@C@ђ–@ЂC@Д—
PM MAIL   Вверх
andrew_121
Дата 13.4.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



adom, Во первых: ты для какой ОС пишешь?
Во вторых: Показывай весь код. Многое сокрыто.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
adom
Дата 13.4.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 15.6.2007

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



Цитата(andrew_121 @ 13.4.2009,  11:01)
adom, Во первых: ты для какой ОС пишешь?
Во вторых: Показывай весь код. Многое сокрыто.

Я разбираю пример, который соответствует стандарту и идёт на любой UNIX подобной ОС, то есть соответствующей стандарту (забыл как сейчас POSIX называется). Полный код с комментариями по указанной ссылке.
По теме: разобрался, я писал в файл данные в двоичном виде, чтобы были "буковки" можно через sprintf это делать, например так
Код

#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>
int main(void)
{

int fd; /* Файловый дескриптор для файла, в котором будет храниться наша информация*/
size_t length; /* Длина отображаемой части файла */
int i;
char str[]="Hello world\n", *ptr, *tmpptr;
printf(str);
fd = open("mapped.dat", O_RDWR | O_CREAT, 0666);
if( fd == -1){
printf("File open failed!\n");
exit(1);
}
length = sizeof(str);
ftruncate(fd,length);
ptr = (char *)mmap(NULL, length, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0);
close(fd);
if( ptr == MAP_FAILED ){
printf("Mapping failed!\n");
exit(2);
}
//tmpptr = ptr;
//tmpptr = str;
sprintf ((char*)ptr,str);
/*
for(i = 1; i <=100; i++){
tmpptr->f = i;
tmpptr->f2 = tmpptr->f*tmpptr->f;
tmpptr++;
}
*/
munmap((void *)ptr, length);
return 0;
}



Это сообщение отредактировал(а) adom - 13.4.2009, 11:48
PM MAIL   Вверх
andrew_121
Дата 13.4.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



adom, Если вопрос решён, пометь тему "решённой".


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

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


 




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


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

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