在本章中,我们将学习:
1.简介
2. API’用于POSIX共享内存
3. POSIX共享内存的示例
介绍:
在上一章中,我们了解了SYS V共享内存。在本章中,我们将学习POSIX共享内存。
您需要在下面的头文件中包含使用共享内存的信息:
#包括<sys/mman.h>
使用共享内存的重要功能有:
1. mmap()
void * mmap(void * addr,size_t len,国彩网 prot,国彩网标志,国彩网 fildes,off_t off);
该功能用于寻址存储对象。
2. mprotect()
国彩网 mprotect(void * addr,size_t len,国彩网 prot);复制代码
此功能用于更改存储器保护。
3. munmap()
国彩网 munmap(void * addr,size_t len);
此功能用于取消映射先前映射的内存地址。
4. shm_open()
国彩网 shm_open(const char * name,国彩网 oflag,mode_t mode);复制代码
此功能用于打开碎片存储对象。
5. shm_unlink()
国彩网 shm_unlink(const char * name);
此功能用于删除共享内存对象。
POSIX共享内存示例:
写
#包括<stdio.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define FILE_PATH "/my_shm_test" 国彩网 main(国彩网 argc, char *argv[]) { 国彩网 res; 国彩网 fd; 国彩网 len; void *addr; char data[256] = "Hello World"; // get shared memory file descriptor fd = shm_open(FILE_PATH, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); // increase the size res = ftruncate(fd, 256); // map shared memory addr = mmap(NULL, 256, PROT_WRITE, MAP_SHARED, fd, 0); // place data 国彩网o memory len = strlen(data) + 1; memcpy(addr, data, len); sleep(2); // mmap cleanup res = munmap(addr, 256); // shm_open cleanup fd = shm_unlink(FILE_PATH); return 0; }
读
#包括<stdio.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #define FILE_PATH "/my_shm_test" 国彩网 main(国彩网 argc, char *argv[]) { 国彩网 res; 国彩网 fd; char data[256]; void *addr; // get shared memory file descriptor fd = shm_open(FILE_PATH, O_RDONLY, S_IRUSR | S_IWUSR); if (fd == -1) { perror("open"); return 10; } // map shared memory addr = mmap(NULL, 256, PROT_READ, MAP_SHARED, fd, 0); // place data 国彩网o memory memcpy(data, addr, 256); pr国彩网f("Read from shared memory: \"%s\"\n", data); return 0; }
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |