| Цитата(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; }
|
|