IPC--共享内存 Share Memory 实例(shmget shmat shmdt shmctl)

原创 2011年11月20日 11:44:04


/*
 * writeShareM.c
 *
 *  Created on: 2011-11-20
 *      Author: snape
 */

#include <stdio.h>
#include <sys/shm.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv) {
	void say(int, char *);

	int shmid;
	int i = 0;
	char *pshm;
	char buf[1024];
	//shmget第二个参数指定创建的共享内存的大小
	say((shmid = shmget(1000, 1024 * 10, 0666 | IPC_CREAT)) < 0,
			"create share memory");
	
	//shmat for share memory attach
	//第二个参数和第三个参数指定要映射得物理内存地址
	//通常设为是 NULL 0 ,表示要映射得物理内存地址是进程空间得首地址
	say((pshm = (char *) shmat(shmid, 0, 0)) == NULL, "attch shm");

	printf("input node 0-9\n");
	scanf("%d", &i);
	printf("node is %d\n", i);

	memset(buf, 0, sizeof(buf));

	printf("input data\n");

	scanf("%s", buf);

	memcpy(pshm + i * 1024, buf, 1024);
	
	//取消对pshm物理地址得映射(进程结束系统会释放共享内存对物理地址得映射) shmdt for share memory detach
	//调用该函数,不会删除共享内存对象,而是将该共享内存对象得链接数减1。
	shmdt(pshm);

	return 0;
}

void say(int flag, char *str) {
	if (flag) {
		fprintf(stderr, "[%s] error\n",str);
	} else {
		fprintf(stderr, "[%s] success\n",str);
	}
}



/*
 * rShareM.c
 *
 *  Created on: 2011-11-20
 *      Author: snape
 */

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/shm.h>

int main(int argc, char **argv) {
	void say(int, char *);
	int i;
	char *pshm;
	char buf[1024];
	int shmid;

	say((shmid = shmget(1000, 10240, 0666 | IPC_CREAT)) < 0,
			"create share memory");
	say((pshm = (char *) shmat(shmid, 0, 0)) == NULL, "attach shm");

	printf("input node 0-9\n");
	scanf("%d", &i);
	printf("node is %d\n",i);


	memset(buf, 0, 1024);
	memcpy(buf,pshm+i*1024,1024);
	fprintf(stderr,"data [%s]\n",buf);
	shmdt(pshm);
	return 0;
}
void say(int flag, char *str) {
	if (flag) {
		fprintf(stderr, "[%s] error\n", str);
	} else {
		fprintf(stderr, "[%s] success\n", str);
	}
}



Linux进程间通信源码剖析,共享内存(shmget()、shmat()、shmdt()及shmctl())

地址:http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html 系统调用mmap()通过映射一个普通文件实现共享内存。系统V...
  • lanmanck
  • lanmanck
  • 2010年12月22日 22:24
  • 6623

Linux 内存共享陷阱及分析(shmget,shmat,shmdt,shmctl)

所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共...
  • ydyang1126
  • ydyang1126
  • 2016年10月13日 09:59
  • 3045

共享内存 shmget()、shmat()、shmdt()、shmctl()

下面将讲解进程间通信的另一种方式,使用共享内存。 一、什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的...
  • wendowswd
  • wendowswd
  • 2017年10月23日 17:10
  • 73

共享内存函数(shmget、shmat、shmdt、shmctl)

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。 1.   shmget函数原型 shmget(...
  • ovoovo
  • ovoovo
  • 2013年09月03日 15:39
  • 443

共享内存实现(shmget shmat shmdt shmctl)

# include # include # include # include # include # include int main(void) { int shmid; cha...
  • u012853614
  • u012853614
  • 2016年11月01日 19:19
  • 178

共享内存函数(shmget、shmat、shmdt、shmctl)

共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。...
  • hustfoxy
  • hustfoxy
  • 2014年04月13日 21:31
  • 807

ipcs ipcrm 信号量(命令)+ 共享内存函数shmget、shmat、shmdt、shmctl

转自:http://blog.csdn.net/cymm_liu/article/details/8266943
  • jinzhilong580231
  • jinzhilong580231
  • 2014年07月03日 18:58
  • 967

linux 共享内存(shmget,shmat,shmdt,shmctl)解析

shmget int shmget(key_t key, size_t size, int shmflg); key:     标识符的规则 size:    共享存储段的字节数 flag...
  • u011774239
  • u011774239
  • 2014年05月13日 07:39
  • 2038

共享内存---shmget shmat shmdt

要使用共享内存,应该有如下步骤:1.开辟一块共享内存 shmget()2.允许本进程使用共某块共享内存 shmat()3.写入/读出4.禁止本进程使用这块共享内存 shmdt()5.删除这块共享内存 ...
  • rickypc
  • rickypc
  • 2010年09月06日 17:54
  • 397

共享内存---shmget shmat shmdt

要使用共享内存,应该有如下步骤:1.开辟一块共享内存 shmget()2.允许本进程使用共某块共享内存 shmat()3.写入/读出4.禁止本进程使用这块共享内存 shmdt()5.删除这块共享内存 ...
  • transistor0
  • transistor0
  • 2013年11月22日 15:37
  • 394
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IPC--共享内存 Share Memory 实例(shmget shmat shmdt shmctl)
举报原因:
原因补充:

(最多只允许输入30个字)