Предположим, у вас есть двоичный файл.Он состоит из двойников.Его размер достаточно мал, чтобы положить в память.Как прочитать все эти числа с помощью функции mmap
?Я попытался разыменовать выходной указатель.Но это только первый элемент данных.Чтобы использовать цикл, нетривиально, как контролировать количество элементов массива.
int main(int argc, char* argv[]) { // we get filename as an argument from the command line
if (argc != 2)
return 1;
int fd = open(argv[1], O_RDWR, 0777);
size_t size = lseek(fd, 0, SEEK_END);
double m = 0;
int cnt = 0; // counter of doubles
void* mp = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
if (mp == MAP_FAILED)
return 1;
double* data = mp;
m += *data; // we want to count the sum of these doubles
++cnt;
int ump_res = munmap(mp, sizeof(double));
if (ump_res < sizeof(double))
return 1;
printf("%a\n", (m / (double)cnt)); // we output the average number of these doubles
close(fd);
return 0;
}
Я ожидаю, что в stdout
мы получим среднее значение всех двойников в файле, имя которого равносдаться argv[1]
.