一、进程之间的通信。--- 共享内存。
1、什么是共享内存?机制如何?
共享内存也是属于IPC对象,所以在使用之前,必须为共享内存申请key值。
共享内存由于存在于运行内存上,运行内存在linux下所有的进程都可以访问到,结论就是任意的两个进程都可以通过共享内存进行通信。
实现步骤: key值 -> ID号 -> 共享内存地址 -> 数据交换 -> 撤销映射。
2、 共享内存函数接口?
1)先申请key值。
key = ftok(".",10);
2)根据申请到的key值去申请共享内存的ID号。 -> shmget() -> man 2 shmget
功能: allocates a System V shared memory segment
//允许在系统中申请一块共享内存 -> 你的住房证明
头文件:
#include <sys/ipc.h>
#include <sys/shm.h>
原型:
int shmget(key_t key, size_t size, int shmflg);
参数:
key: 共享内存的key值。
size:共享内存的总字节数,必须是PAGE_SIZE的倍数 #define PAGE_SIZE 1024
shmflg:IPC_CREAT|0666 -> 不存在则创建。
返回值:
成功:共享内存的ID号
失败:-1
3)根据共享内存ID号去运行内存上申请对应的空间。 -> shmat() -> man 2 shmat
头文件:
#include <sys/types.h>
#include <sys/shm.h>
原型:
void *shmat(int shmid, const void *shmaddr, int shmflg);
参数:
shmid:共享内存的ID号。
shmaddr:NULL -> 系统自动分配空间给你 99.99999%
不为NULL-> 用户自己选择地址 0.0000