# write.c
/* #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); 作用:创建一个新的共享内存段,或获取一个既有共享内存段的标识 新创建的段会初始化为0 参数: key:是一个整形,通过这个找到或创建一个共享内存, 一般使用16进制,非0值 随便自定义即可 size:共享内存的大小 shmflg: 访问权限 附加属性:创建/判断共享内存是否存在 创建:IPC_CREAT 判断:IPC_EXCL,需要和IPC_CREAT一起使用 IPC_CREAT | IPC_EXCL | 0664 返回值: 成功:共享内存标识 失败:-1 #include <sys/types.h> #include <sys/shm.h> void *shmat(int shmid, const void *shmaddr, int shmflg); 功能:将共享内存与当前进程关联 参数: shmid:标识 shmaddr:申请的共享内存起始地址,传入NULL即可,由内核指定 shmflg:权限 SHM_RDONLY,读权限,必须要有 0,读写 返回值: 成功:共享内存起始地址 失败:void * -1 #include <sys/types.h> #include <sys/shm.h> int shmdt(const void *shmaddr); 功能:解除当前进程和共享内存的关联 参数: shmaddr:共享内存首地址 返回值: 成功:0 失败:-1 #include <sys/ipc.h> #include <sys/shm.h> int shmctl(int shmid, int cmd, struct shmid_ds *buf); 功能:操作共享内存,主要使用删除功能 参数: shmid:标识 cmd:操作命令 IPC_STAT:获取共享内存当前状态 IPC_SET:设置共享内存的状态 IPC_RMID:标记共享内存被删除 buf:需要设置或获取的共享内存属性信息 IPC_STAT:获取的数据 IPC_SET:需要设置的数据 IPC_RMID:NULL #include <sys/types.h> #include <sys/ipc.h> key_t ftok(const char *pathname, int proj_id); 功能:根据指定的路径和int值,生成一个共享内存的key 参数: pathname:指定一个存在的路径 /home/wtsruvf/Linux/a.txt proj_id:int类型的值,但系统调用只会只用其中一个字节 因此一般指定一个字符即可,如'a' */ #include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/shm.h> #include <string.h> int main() { // 创建共享内存 int shmid = shmget(100, 4096, IPC_CREAT | 0777); // 共享内存与当前进程关联 void *shmaddr = shmat(shmid, NULL, 0); // 写数据 char *str = "Hello World"; memcpy(shmaddr, str, strlen(str)); printf("please press any key to continue\n"); getchar(); // 解除关联 shmdt(shmaddr); // 删除共享内存 shmctl(shmid, IPC_RMID, NULL); return 0; }
# read.c
#include <stdio.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <sys/shm.h> #include <string.h> int main() { // 获取共享内存 int shmid = shmget(100, 4096, IPC_CREAT); // 共享内存与当前进程关联 void *shmaddr = shmat(shmid, NULL, 0); // 读数据 printf("%s\n", (char *)shmaddr); printf("please press any key to continue\n"); getchar(); // 解除关联 shmdt(shmaddr); // 删除共享内存 shmctl(shmid, IPC_RMID, NULL); return 0; }
标签:IPC,共享内存,shmaddr,int,shmid,include From: https://www.cnblogs.com/WTSRUVF/p/17366652.html