国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

Linux共享內存編程示例

2020-07-10 11:19:18
字體:
來源:轉載
供稿:網友

一、概念

共享內存是被多個進程共享的一部分物理內存,是進程間共享數據的最快的一種方法。
 
二、實現(xiàn)

分為兩個步驟:
1、創(chuàng)建共享內存。
2、映射共享內存。
1、創(chuàng)建

復制代碼
代碼如下:

int shmget(key_t key, int size, int shmflg)

當key的取值為 IPC_PRIVATE 時,將創(chuàng)建一塊新的共享內存。shmflg至少設為S_IRUSR|S_IWUSR否則會出現(xiàn)讀寫錯誤。成功返回內存標示符,失敗返回-1。
2、映射

復制代碼
代碼如下:

int shmat(int shmid, char *shmaddr, int flag)

shmaddr為共享內存的起始地址。flag對內存的操作模式。通常命令可寫為:shmat(shmid,NULL,0);
 
成功返回共享內存的起始地址,失敗返回-1。
 
三、舉例

復制代碼
代碼如下:

#include<sys/stat.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<memory.h>
#include<fcntl.h>
#define PERM S_IRUSR|S_IWUSR</p><p>int main(int argc ,char *argv[]){
int shmid;
pid_t pid;
if(argc!=2){
printf("Usage: shmA [string]/n");
return -1;
}
if((shmid=shmget(IPC_PRIVATE,1024,PERM))<0){
printf("shared memory create error!/n");
_exit(1);
}
char *p;
pid=fork();
if(pid ==0){
sleep(1);
p=shmat(shmid,NULL,0);
memset(p,'/0',1024);
strcpy(p,argv[1]);
printf("already written!!! It's %s /n",p);
}
else{
wait(NULL);
p = shmat(shmid,NULL,0);
printf("read from memory %s /n",p);
}
return 0;
}
      

子進程寫入argv[1],父進程輸出argv[1]的值。
 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 余江县| 安远县| 钟祥市| 基隆市| 密云县| 阜平县| 乐安县| 常州市| 灵石县| 渝北区| 专栏| 东安县| 岳池县| 大庆市| 桂平市| 明星| 易门县| 合山市| 凤庆县| 岫岩| 高陵县| 墨脱县| 保靖县| 天峻县| 河北省| 平顶山市| 永济市| 蓬莱市| 屯留县| 南丹县| 夹江县| 靖州| 筠连县| 广德县| 宜宾市| 久治县| 福贡县| 五家渠市| 无锡市| 西吉县| 东乡|