说明:
1、创建共享内存使用的函数:int shmget(key_t key, size_t size, int shm-flg);
2、参数key既可以是IPC_PRIVATE(0),也可是是ftok函数返回的一个关键字。
3、参数size指定段的大小。
4、参数flags 八进制数,0xxx。转化为二进制后分别代表rw-rw-rw-
IPC_CREAT:当shmflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的共享内存,则新建一个共享内存;如果存在这样的共享内存,返回此共享内存的标识符;IPC_CREAT|IPC_EXCL:如果内核中不存在键值
与key相等的共享内存,则新建一个共享内存;如果存在这样的共享内存则报错
5、shmget成功返回shmid,失败返回-1。
6、在命令行执行ipcs –m 显示,已经成功的创建了一块共享内存区。
7、nattch字段显示已经附加到这个内存区的进程数。
步骤:
1、创建源文件main.c:
#include <stdio.h>#include <sys/ipc.h>#include <sys/shm.h>int main(int argc, char *args[]){// 建立一块共享内存区域int shid = shmget(IPC_PRIVATE, 1024, IPC_CREAT | 0666);// 输出共享内存的id号printf("shid = %d\n", shid);return 0;}
2、创建makefile文件:
.SUFFIXES:.c .oCC=gccSRCS=main.cOBJS=$(SRCS:.c=.o)EXEC=mainstart: $(OBJS)$(CC) -o $(EXEC) $(OBJS)@echo "--------------------------OK------------------------".c.o:$(CC) -Wall -o $@ -c $<clean:rm -rf $(OBJS) $(EXEC)
3、编译并执行程序,并查看共享内存:
[negivup@negivup mycode]$ makegcc -Wall -o main.o -c main.cgcc -o main main.o--------------------------OK------------------------[negivup@negivup mycode]$ mainshid = 229381[negivup@negivup mycode]$ ipcs -m------ Shared Memory Segments --------key shmidownerpermsbytesnattchstatus0x00000000 229381negivup 666 1024 0
可以看出,共享内存创建成功,共享内存的ID是229381