#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;
}
打开文件:使用 open 函数打开一个文件,返回文件描述符 fd。
获取文件大小:使用 fstat 函数获取文件的元数据(如文件大小)并存储在 struct stat 结构体中。
映射文件到内存:使用 mmap 函数将文件内容映射到进程的地址空间。mmap 的参数包括:
NULL:让系统选择映射的起始地址。sb.st_size:映射的字节数,即文件大小。PROT_READ | PROT_WRITE:指定映射区域的保护权限,这里是读写权限。MAP_SHARED:指定映射类型为共享映射,即对映射区域的修改会反映到文件中。fd:文件描述符。0:映射的偏移量,从文件开头开始映射。修改映射区域的内容:直接操作映射到内存中的文件内容,这里用 strcpy 修改文件内容。
同步修改内容到文件:使用 msync 函数将修改后的内存内容同步回文件。
解除映射:使用 munmap 函数解除内存映射。
关闭文件描述符:最后关闭文件描述符,释放资源。
上一篇:linux export命令
下一篇:linux新增用户
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站