Linux通信代码实现

Linux通信代码实现

ID:44714859

大小:100.01 KB

页数:26页

时间:2019-10-25

Linux通信代码实现_第1页
Linux通信代码实现_第2页
Linux通信代码实现_第3页
Linux通信代码实现_第4页
Linux通信代码实现_第5页
资源描述:

《Linux通信代码实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux进程间通信--共享内存方式(含例子)2008-07-2215:04共享内存实现分为两个步骤:一、创建共享内存,使用shmget函数。二、映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数由于这种方式是直接对用户空间的内存进行映射,故效率较高,使用起来也方便;但需要注意的是,多个进程并发访问共享内存时的同步控制问题,可用信号量操作解决。系统调用:shmget();原型:intshmget(key_tkey,intsize,intshmflg);   返回值:如果成功,返回共享内存段标识符。   如果失败,则返回-1: 

2、  errno=EINVAL(无效的内存段大小)        EEXIST(内存段已经存在,无法创建)        EIDRM(内存段已经被删除)        ENOENT(内存段不存在)        EACCES(权限不够)        ENOMEM(没有足够的内存来创建内存段)函数中的key_t如何获得已经在上一篇文章中说明了系统调用:shmat();原型:intshmat(intshmid,char*shmaddr,intshmflg);   返回值:如果成功,则返回共享内存段连接到进程中的地址。   如果失败,则返回-1:   err

3、no=EINVAL(无效的IPCID值或者无效的地址)        ENOMEM(没有足够的内存)        EACCES(存取权限不够)当一个进程不在需要共享的内存段时,它将会把内存段从其地址空间中脱离。系统调用:shmdt();调用原型:intshmdt(char*shmaddr);   返回值:如果失败,则返回-1:      errno=EINVAL(无效的连接地址)举例:shm1.c#include#include#include#include#include

4、#include#include#include#include#includeintmain(){  key_tipckey;  intshmid;  inti;  char*addr_c;  charsrcbuf[8]="abcdefg";  ipckey=ftok("/home/yds/tmp/shmipc",0);  shmid=shmget(ipckey,1024,IPC_CREAT

5、0666);  if(s

6、hmid==-1)   {      printf("creatshmerror!");      return-1;    }  addr_c=(char*)shmat(shmid,0,0);  if((int)addr_c==-1)   {      printf("attachshmerror!");      return-1;    }  while(1)  {           for(i=0;i

7、  strcpy(addr_c,srcbuf);      sleep(1);    }  shmdt(addr_c);  return0;}shm2.c#include#include#include#include#include#include#include#include#include#includeintmain(){key_ti

8、pckey;intshmid;inti;char*addr_c;ipckey=ftok("/home/yds/tmp/shmipc",0);shmid=shmget(ipckey,1024,IPC_CREAT

9、0666);if(shmid==-1){printf("creatshmerror!");return-1;}addr_c=(char*)shmat(shmid,0,0);if((int)addr_c==-1){printf("attachshmerror!");return-1;}while(1){sleep(2);printf("st

10、ring(shm)is:%s",addr_c);}shmdt(addr_c);return

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。