码迷,mamicode.com
首页 > 系统相关 > 详细

进程间通信(共享内存),五种通信方式简单总结

时间:2016-04-19 00:47:49      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:system   空间   通信   

共享内存:它是system V版本中最高效的一种通信机制,可以使多个进程共享同一地址空间,若有一个进程修改该地址空间,则其它共享该地址空间的进程可以同时看到,但它不提供同步与互斥关系。一般结合信号量来达到进程间的同步于互斥。 

创建共享内存:int shmget(key_t _key,size_t size,int shmflg);//size必须为4096的倍数,即页表大小的倍数。

挂接进程:void* shmat(int shmid,const void* shmaddr,int shmflg);//把当前调用共享内存的进程挂接到指定的地址空间上。一般设置shmflg默认为0,shmaddr一般为NULL

去关联进程:int shmdt(const void *shmaddr)//只需直接修改页表

释放共享内存:int shmctl(int shmid,int cmd,const void* buf);//cmd以IPC_RMID指令立即删除。

share.h

技术分享

share.c文件

技术分享

技术分享

client.c文件

技术分享

server.c文件

技术分享

运行结果:

技术分享

进程间通信的五种方式总结:进程之间之所以要通信,其实是要将它们彼此的数据可以让彼此访问。

管道通信:匿名管道(只适用于有血缘的进程之间进行单向通信,它是存在内存上的一个特殊文件);命名管道(解决了两个无血缘关系的进程之间也可以进行单向通信,它是真实存在于硬盘上的文件,在文件系统中以路径名的形式存在。)它们都是基于字节的。

System V版本下的三种通信机制:

1.消息队列(使两个进程进行双向通信,即一问一答形式)。一个进程可以向队列中添加消息,另一个进程可以从消息队列中读出消息。

2.信号量(通过P,V操作对当前临界资源的访问进行有序的控制访问)。主要作用是进程间或同一进程中的多个线程之间的同步。

3.共享内存(即多个进程可以同时共享某一地址空间内容以及修改其内容,该过程可被其它共享同一地址空间的其他进程看到),它是最高效的。


进程间通信(共享内存),五种通信方式简单总结

标签:system   空间   通信   

原文地址:http://10541559.blog.51cto.com/10531559/1765121

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!