您的位置:首页 > 运维架构 > Linux

Linux下的共享内存(02)---创建共享内存

2015-09-21 17:52 736 查看
环境:Vmware Workstation;CentOS-6.4-x86_64

说明:

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 .o

CC=gcc

SRCS=main.c
OBJS=$(SRCS:.c=.o)
EXEC=main

start: $(OBJS)
$(CC) -o $(EXEC) $(OBJS)
@echo "--------------------------OK------------------------"

.c.o:
$(CC) -Wall -o $@ -c $<

clean:
rm -rf $(OBJS) $(EXEC)3、编译并执行程序,并查看共享内存:
[negivup@negivup mycode]$ make
gcc -Wall -o main.o -c main.c
gcc -o main main.o
--------------------------OK------------------------
[negivup@negivup mycode]$ main
shid = 229381
[negivup@negivup mycode]$ ipcs -m

------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 229381 negivup 666 1024 0
可以看出,共享内存创建成功,共享内存的ID是229381

PS:根据传智播客视频学习整理得出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: