Здравствуйте. Ниже приведены программы записи и чтения одномерного массива из mmap файла. Как мне прочитать многомерный(трехмерный, например) массив данных из файла? Заранее спасибо.
WRITE
#define width 20
#define FILEPATH "/tmp/data.txt"
int main(int argc, char *argv[])
{
unsigned char Dekart[width];
int i;
for (i=0;i<width; i++) Dekart[i] =(unsigned char)rand()%255;
int fd = open(FILEPATH, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); // дескриптор файла
int file_size = sizeof(Dekart);
lseek(fd, file_size+1, SEEK_SET); // перемещаемся в конец
write(fd, "\0", 1); // делаем запись
void* file_memory = mmap(NULL, file_size, PROT_WRITE, MAP_SHARED, fd, 0);// указатель на отображенный в памяти файл
close(fd);
memcpy(file_memory, Dekart, file_size); //копируем из Dekart в file_memory
munmap(file_memory, file_size);
}
READ
#define width 20
#define FILEPATH "/tmp/data.txt"
int main(int argc, char *argv[])
{
int i;
unsigned char *Dekart;
int fd = open(FILEPATH, O_RDWR, S_IRUSR|S_IWUSR);// открываем файл для чтения
if (fd<0) printf ("%s\n", "У нас проблемы");
else
{
Dekart = mmap(0, sizeof(Dekart), PROT_READ, MAP_SHARED, fd, 0);// отображаем его содержимое в память и получаем указатель на него
close(fd);// освобождаем дескриптор
for (i=0;i<width; i++) printf("%d\n", Dekart[i]);
}
}