read (), fread () прочитает указанное вами количество в указанный вами буфер. Mmap - это отдельный интерфейс к кешу файлов ядра. Если эти две точки пересекаются, ядро, скорее всего, сначала прочитает файл в буферы кэша, а затем скопирует выбранные биты этих буферов буфера в пользовательский буфер.
Эта двойная копия часто необходима, поскольку ваша программа не обеспечить необходимый размер выравнивания и блокировки, который требуется базовому устройству, а если данные требуют преобразования (расшифровать, распаковать), ему необходимо место для этого.
Этот кэш ядра сохраняется согласованным с файлом, поэтому система в целом читает и пишет go через него. Если вы отобразите файл, вы сможете избежать двойной копии; но приходится иметь дело с изменениями в файле, появляющемся необъявленным.