- 論壇徽章:
- 0
|
1. linux/Unix進(jìn)程通信,包括共享內(nèi)存,消息隊列,信號量。主要問題是在兩個進(jìn)程之間通信
的時候,怎么確定進(jìn)程之間共用的IPC通信資源的標(biāo)識。
一種方法是在主進(jìn)程初始化的時候,規(guī)定好各個子進(jìn)程之間通信要用到的通信資源的標(biāo)識。如下面的偽代碼所
顯示的那樣, 可以定義好一個頭文件,在它里面事先規(guī)定好這些資源號(key).
key.h
key_t key1 = 222, key2 = 333, key4 = 444;
#include "key.h"
void main()
{
pid = fork();
if (pid == 0)
/* 第一個子進(jìn)程 */
{
shmget(key1, *, * );/msgget(key2, *, *);/semget(key3, *, *);
}
else
{
pid = fork();
if (pid == 0);
/* 第二個子進(jìn)程 */
{
shmget(key1, *, * );/msgget(key2, *, *);/semget(key3, *, *);
}
}
}
當(dāng)然,主進(jìn)程中也可以使用IPC資源和兩個子進(jìn)程通信。這里是以從同一個主進(jìn)程派生出來的子進(jìn)程
通信作為示例.實際情況中肯定是不同的程序間通信.
這個方法當(dāng)然可以工作,但是我覺得很不安全.而且不靈活.這些進(jìn)程(程序)只見需要在程序編碼上保持
一致(都需要包括相同的定義key值的頭文件),而且這樣做還有一個更致命的弱點,其他進(jìn)程也可能使用這個整數(shù)
作為另外的IPC資源的關(guān)鍵字.
我知道有人建議是用ftok這個函數(shù):key_t ftok(const char *path, int id);通過在不同的進(jìn)程間調(diào)用
這個函數(shù),相同的參數(shù)會產(chǎn)生相同的key值,然后就可以通信.
我不知道還有沒有別的方法,但是我覺得這個方法還是有比較大的限制,起碼需要不同的程序間要約定調(diào)
用相同的參數(shù).不知道還有沒有別的方法在不同進(jìn)程之間確定公用的進(jìn)程資源?
在unix中有ipcs這樣的命令來獲取現(xiàn)在系統(tǒng)中的進(jìn)程通信的資源信息,不知道有沒有類似的API能提供這
樣的要求.
不知道windows的剪貼板是怎么實現(xiàn)的,那么多不同的程序(進(jìn)程)間都能共用這個公用的資源. |
|