赞
踩
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <sys/mman.h>
- #include <unistd.h>
- #include <string.h>
- int main(int argc, char const *argv[])
- {
- // 1、通过open打开文件
- int fd = open("tmp", O_RDWR | O_CREAT, 0666);
- if (fd < 0)
- {
- perror("open");
- return 0;
- }
- // 2、拓展文件大小
- truncate("tmp", 16);
- // 3、mmap建立映射
- char *buf = (char *)mmap(NULL, 16, PROT_READ | PROT_WRITE, MAP_SHARED,
- fd, 0);
- // 4、使用内存区域,读
- printf("buf=%s\n", buf);
- printf("buf=%s\n", buf);
- // 4、使用内存区域,写
- // strcpy(buf, "hello mmap");
- // 5、断开映射
- munmap(buf, 16);
- close(fd);
- return 0;
- }
shmget函数
1.获取唯一key值
2.获取共享内存标识符
3.建立共享内存映射
4.操作映射
1.读
2.写
5.释放映射
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- #include <string.h>
- int main(int argc, char const *argv[])
- {
- // 1、获取唯一的key值
- key_t key = ftok("/", 2023);
- // 2、根据唯一的key的共享内存标识(分配物理内存)
- int shm_id = shmget(key, 32, IPC_CREAT | 0666);
- printf("shm_id=%d\n", shm_id);
- // 3、建立进程和物理内存的映射
- char *p = (char *)shmat(shm_id, NULL, 0);
- // 4,操作映射,写
- strcpy(p, "hello shm");
- // 4,操作映射,读
- // printf("%s\n",p);
- // 5、断开进程和物理内存的映射
- shmdt(p);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。