首页
关于我们
服务项目
作品展示
服务支持
联系我们
友情链接
网站地图
 您当前位置:网络学院 -> 系统问题系-> 操作系统-> Linux
在Linux操作系统中实现内部进程通信
作者:admin 来源:网络
日期: 2007-2-24
站内搜索
文章页数:[1] 
Linux给我们提供了丰富的内部进程通信机制,包括共享内存、内存映射文件、先入先出(FIFO)、接口(sockets)以及多种用于同步的标识。在本文中,我们主要讨论一下共享内存和内存映射文件技术。

  一般来说,内部进程通信(interprocess communication)也就是IPC,是指两个或两个以上进程以及两个或者两个以上线程之间进行通信联系。每个IPC机制都有不同的强项或者弱点,不过没有一个IPC机制包含内建的同步方法。因此程序员不但需要自己在程序中实现同步,而且还需要为了利用IPC机制而自己开发通信协议。

  共享内存

  使用共享内存和使用malloc来分配内存区域很相似。使用共享内存的方法是:

  1.对一个进程/线程使用shmget分配内存区域。

  2.使用shmat放置一个或多个进程/线程在共享内存中,你也可以用shmctl来获取信息或者控制共享区域。

  3.使用shmdt从共享区域中分离。

  4.使用shmctl解除分配空间

  下面是个例子:

  
//建立共享内存区域     
intshared_id;     
char *region;     
const intshm_size = 1024;          
shared_id = shmget(IPC_PRIVATE,

//保证使用唯一ID              
shm_size,              
IPC_CREAT | IPC_EXCL |

//创建一个新的内存区域              
S_IRUSR | S_IWUSR);

//使当前用户可以读写这个区域          
//交叉进程或生成进程.          
//将新建的内存区域放入进程/线程     
region = (char*) shmat(segment_id, 0, 0);

//其他程序代码     

...          

//将各个进程/线程分离出来     
shmdt(region);          
//破坏掉共享内存区域     
shmctl(shared_id, IPC_RMID, 0);  
  共享内存是Linux中最快速的IPC方法。他也是一个双向过程,共享区域内的任何进程都可以读写内存。这个机制的不利方面是其同步和协议都不受程序员控制,你必须确保将句柄传递给了子进程和线程。

  内存映射文件

  内存映射文件不仅仅用于IPC,在其他进程中它也有很大作用。如果你需要将一个分配的缓冲区初始化为零,只要记住/dev/zero 。你也可以通过将文件映射到内存中以提高其性能。它使你可以像读写字符串一样读写文件。下面是个例子:

  
const char filename[] = "testfile";     
intfd;     
char *mapped_mem;     
const intflength = 1024;     
fd = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);     
lseek(fd, flength + 1, SEEK_SET);     
write(fd, "\0", 1);     
lseek(fd, 0, SEEK_SET);          
mapped_mem = mmap(0,flength,PROT_WRITE, //允许写入MAP_SHARED,//写入内容被立即写入到文件fd,0);
close(fd);//使用映射区域.
...
munmap(file_memory, flength);  
  利用内存映射来处理IPC的好处是在整个过程中你不需要处理句柄:只要打开文件并把它映射在合适的位置就行了。你可以在两个不相关的进程间使用内存映射文件。

  使用内存映射的缺点是速度不如共享内存快。如果凑巧文件很大,所需要的虚拟内存就会很大,这样会造成整体性能下降。
文章页数:[1] 
放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·体验比Vista还炫的窗口透明和3D桌面
·Linux操作系统下的常见系统资源共享
·Linux操作系统下广播程序制作介绍
·如何在Linux下使用红外进行手机通讯
·十大经典Linux系统当机画面集锦
·Linux操作系统内核和设备文件对话
·教你制作Linux操作系统的USB启动盘
·Linux操作系统中的七件超厉害的武器
·七大步骤建立可靠的Linux操作系统
·自己动手做一个迷你型Linux操作系统
最新文章
·Linux脚本开发数学库在PHP中的重要性
·在Linux操作系统中实现内部进程通信
·Linux操作系统下的常见系统资源共享
·如何在Linux下使用红外进行手机通讯
·Linux操作系统下的网络邻居软件大全
·Linux操作系统内核和设备文件对话
·在Linux系统下清除操作信息的记录
·Linux操作系统中的七件超厉害的武器
·亲身体验:升级Linux系统内核完全过程
·Linux操作系统下广播程序制作介绍
相关主题
  • Linux脚本开发数学库在PHP中的重要性
  • Linux操作系统下的常见系统资源共享
  • 如何在Linux下使用红外进行手机通讯
  • Linux操作系统下的网络邻居软件大全
  • Linux操作系统内核和设备文件对话
  • 版权申明:除部分特别声明不要转载,或者授权本站独家播发的文章外,大家可以自由转载本站的原创文章,但原作者和来自本站的链接必须保留(非本站原创的,按照原来自一节,自行链接)。文章版权归本站和作者共有。
    转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去本站水印。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论  打印  刷新  推荐给朋友  返回顶部  关闭

    网上大名: