免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1796 | 回复: 3

进程之间共用的IPC通信资源的标识问题 [复制链接]

论坛徽章:
0
发表于 2005-12-27 20:41 |显示全部楼层
1. linux/Unix进程通信,包括共享内存,消息队列,信号量。主要问题是在两个进程之间通信
的时候,怎么确定进程之间共用的IPC通信资源的标识。

一种方法是在主进程初始化的时候,规定好各个子进程之间通信要用到的通信资源的标识。如下面的伪代码所
显示的那样, 可以定义好一个头文件,在它里面事先规定好这些资源号(key).

key.h

key_t  key1 = 222, key2 = 333, key4 = 444;

#include "key.h"

void main()
{


        pid = fork();
       
       
        if (pid == 0)
        /* 第一个子进程 */
        {
                shmget(key1, *, * );/msgget(key2, *, *);/semget(key3, *, *);
               

        }
        else
        {
                pid = fork();
               
                if (pid == 0);
                /* 第二个子进程 */
                        {
                                shmget(key1, *, * );/msgget(key2, *, *);/semget(key3, *, *);
                        }
               
        }       

}
        当然,主进程中也可以使用IPC资源和两个子进程通信。这里是以从同一个主进程派生出来的子进程
通信作为示例.实际情况中肯定是不同的程序间通信.
        这个方法当然可以工作,但是我觉得很不安全.而且不灵活.这些进程(程序)只见需要在程序编码上保持
一致(都需要包括相同的定义key值的头文件),而且这样做还有一个更致命的弱点,其他进程也可能使用这个整数
作为另外的IPC资源的关键字.
        我知道有人建议是用ftok这个函数:key_t ftok(const char *path, int id);通过在不同的进程间调用
这个函数,相同的参数会产生相同的key值,然后就可以通信.
       
        我不知道还有没有别的方法,但是我觉得这个方法还是有比较大的限制,起码需要不同的程序间要约定调
用相同的参数.不知道还有没有别的方法在不同进程之间确定公用的进程资源?
        在unix中有ipcs这样的命令来获取现在系统中的进程通信的资源信息,不知道有没有类似的API能提供这
样的要求.

        不知道windows的剪贴板是怎么实现的,那么多不同的程序(进程)间都能共用这个公用的资源.

论坛徽章:
0
发表于 2005-12-27 21:24 |显示全部楼层
两个进程如果要使用同一个资源,事先至少要约定一个双方都能同意的标识,否则怎么通信呢?

当然如果系统只有一个资源,比如剪贴板,那么就不用了,因为标识等于是固定的,hard code的。

ipcs的主要功能是通过shmctl, semctl, msgctl函数来完成的

论坛徽章:
0
发表于 2005-12-28 17:57 |显示全部楼层

回复 1楼 plscareme 的帖子

你想做什么啊, 有些东西不是你觉不安全就不安全的,
IPC中通常有三种方法产生关键字, 1, 指定关键字,2 公用头文件,3 同一路径名和ID
应该就是这三种

请理解一下什么叫协议吧!! 程序间不约定,怎么通讯!?

招聘 : c/c++研发
论坛徽章:
0
发表于 2005-12-29 09:30 |显示全部楼层
#define MSG_FILE "filefile"
key_t key;
if((key=ftok(MSG_FILE,'a'))==-1)
        {
                fprintf(stderr,"Creat Key Error:%s\a\n",strerror(errno));
                exit(1);
        }
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP