查看: 7868|回复: 0
打印 上一主题 下一主题

Linux系统中实现内部进程通信的方法

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-16 13:44:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
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的好处是在整个过程中你不需要处理句柄:只要打开文件并把它映射在合适的位置就行了。你可以在两个不相关的进程间使用内存映射文件。


使用内存映射的缺点是速度不如共享内存快。如果凑巧文件很大,所需要的虚拟内存就会很大,这样会造成整体性能下降。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表