Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

linux mmap

作者:▄对对碰   发布日期:2025-11-11   浏览:21

#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main() {
    int fd;
    char *map;
    struct stat sb;

    // 打开文件
    fd = open("example.txt", O_RDWR);
    if (fd == -1) {
        perror("open");
        return 1;
    }

    // 获取文件大小
    if (fstat(fd, &sb) == -1) {
        perror("fstat");
        close(fd);
        return 1;
    }

    // 映射文件到内存
    map = mmap(NULL, sb.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (map == MAP_FAILED) {
        perror("mmap");
        close(fd);
        return 1;
    }

    // 修改映射区域的内容
    strcpy(map, "Hello, mmap!");

    // 同步修改内容到文件
    msync(map, sb.st_size, MS_SYNC);

    // 解除映射
    if (munmap(map, sb.st_size) == -1) {
        perror("munmap");
        close(fd);
        return 1;
    }

    // 关闭文件描述符
    close(fd);

    return 0;
}

解释说明

  1. 打开文件:使用 open 函数打开一个文件,返回文件描述符 fd

  2. 获取文件大小:使用 fstat 函数获取文件的元数据(如文件大小)并存储在 struct stat 结构体中。

  3. 映射文件到内存:使用 mmap 函数将文件内容映射到进程的地址空间。mmap 的参数包括:

    • NULL:让系统选择映射的起始地址。
    • sb.st_size:映射的字节数,即文件大小。
    • PROT_READ | PROT_WRITE:指定映射区域的保护权限,这里是读写权限。
    • MAP_SHARED:指定映射类型为共享映射,即对映射区域的修改会反映到文件中。
    • fd:文件描述符。
    • 0:映射的偏移量,从文件开头开始映射。
  4. 修改映射区域的内容:直接操作映射到内存中的文件内容,这里用 strcpy 修改文件内容。

  5. 同步修改内容到文件:使用 msync 函数将修改后的内存内容同步回文件。

  6. 解除映射:使用 munmap 函数解除内存映射。

  7. 关闭文件描述符:最后关闭文件描述符,释放资源。

上一篇:linux export命令

下一篇:linux新增用户

大家都在看

linux常用命令查询端口是否正常

linux 发送邮件

linux长ping命令

linux groupadd

linux关机命令行

linux重启oracle命令

linux把一个文件夹移动到另一个文件夹里

linux查看系统运行时间

linux搭建sftp

linux 重启网络命令

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站