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:根据传智播客视频学习整理得出。
说明:
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:根据传智播客视频学习整理得出。
相关文章推荐
- 理解 Linux 的硬链接与软链接
- Linux下的共享内存(01)---查看和释放共享内存
- Linux的计划任务
- Linux开关命令(shutdown,reboot,halt,init)
- Linux parted 分区
- linux自学心得之--安装内核头文件
- Linux下的有名管道(06)---使用两个管道实现两个进程之间的通信(手机模式)
- 关于linux有效用户id的解释
- Linux sed命令解析
- CentOS iSCSI服务器搭建------Target篇
- LINUX文件锁定
- Linux知识(2)----fcitx输入法安装
- CentOS 6.5上使用gdb调试时出现Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.132.el6.i686 .
- block_dump观察Linux IO写入的具体文件
- windows远程(xrdp+vnc)连接ubuntu linux
- linux环境变量 export命令详解
- Linux下的有名管道(05)---使用两个管道实现两个进程之间的通信(对讲机模式)
- phalcon的安装详细
- Centos下安装svn客户端
- 【问题】CentOS6.5系统"libc.so.6: version 'GLIBC_2.15' not found"解决方法