媒介
共享内存重要用于过程间通信,Linux有两种共享内存(Shared Memory)机制:
- # echo 68157440 > /proc/sys/kernel/shmmax# cat /proc/sys/kernel/shmmax
- 68157440# ipcmk -M 68157440
- Shared memory id: 0# ipcs -m
- ------ Shared Memory Segments --------
- key shmid owner perms bytes nattch status
- 0xef46b249 0 root 644 68157440 0
(1) ** System V shared memory(shmget/shmat/shmdt) **
Original shared memory mechanism, still widely used Sharing between unrelated processes.
(2) ** POSIX shared memory(shm_open/shm_unlink) **
Sharing between unrelated processes, without overhead of filesystem I/O Intended to be simpler and better than older APIs.
别的,在Linux中不得不提一下内存映射(也可用于过程间通信):
** Shared mappings – mmap(2) **
l Shared anonymous mappings:Sharing between related processes>
SYSV共享内存的最大年夜大年夜小为32M:
- # cat /proc/sys/kernel/shmmax
- 33554432
- # ipcmk -M 68157440
- ipcmk: create share memory failed: Invalid argument
这是正常的。
(2)将shmmax调剂为65M
可以看到system v共享内存的大年夜小并不受/dev/shm的影响。
(3)创建POSIX共享内存
点击(此处)折叠或打开
- /*gcc -o shmopen shmopen.c -lrt*/#include <unistd.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <sys/mman.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define MAP_SIZE 68157440
- int main(int argc, char *argv[])
- {
- int fd;
- void* result;
- fd = shm_open("/shm1", O_RDWR|O_CREAT, 0644);
推荐阅读
Win7体系U盘插入后假逝世怎么处理?有效户表示,在Win7体系下,U盘插入后体系会出现假逝世的问题,一般十几秒钟就恢复正常了,固然对操作体系毫无影响,我们却不想存在任何假设的病毒存在,>>>详细阅读
地址:http://www.17bianji.com/lsqh/36688.html
1/2 1