- 论坛徽章:
- 0
|
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的剪贴板是怎么实现的,那么多不同的程序(进程)间都能共用这个公用的资源. |
|