亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
進(jìn)程之間共用的IPC通信資源的標(biāo)識(shí)問題
[打印本頁(yè)]
作者:
plscareme
時(shí)間:
2005-12-27 20:41
標(biāo)題:
進(jìn)程之間共用的IPC通信資源的標(biāo)識(shí)問題
1. linux/Unix進(jìn)程通信,包括共享內(nèi)存,消息隊(duì)列,信號(hào)量。主要問題是在兩個(gè)進(jìn)程之間通信
的時(shí)候,怎么確定進(jìn)程之間共用的IPC通信資源的標(biāo)識(shí)。
一種方法是在主進(jìn)程初始化的時(shí)候,規(guī)定好各個(gè)子進(jìn)程之間通信要用到的通信資源的標(biāo)識(shí)。如下面的偽代碼所
顯示的那樣, 可以定義好一個(gè)頭文件,在它里面事先規(guī)定好這些資源號(hào)(key).
key.h
key_t key1 = 222, key2 = 333, key4 = 444;
#include "key.h"
void main()
{
pid = fork();
if (pid == 0)
/* 第一個(gè)子進(jìn)程 */
{
shmget(key1, *, * );/msgget(key2, *, *);/semget(key3, *, *);
}
else
{
pid = fork();
if (pid == 0);
/* 第二個(gè)子進(jìn)程 */
{
shmget(key1, *, * );/msgget(key2, *, *);/semget(key3, *, *);
}
}
}
當(dāng)然,主進(jìn)程中也可以使用IPC資源和兩個(gè)子進(jìn)程通信。這里是以從同一個(gè)主進(jìn)程派生出來的子進(jìn)程
通信作為示例.實(shí)際情況中肯定是不同的程序間通信.
這個(gè)方法當(dāng)然可以工作,但是我覺得很不安全.而且不靈活.這些進(jìn)程(程序)只見需要在程序編碼上保持
一致(都需要包括相同的定義key值的頭文件),而且這樣做還有一個(gè)更致命的弱點(diǎn),其他進(jìn)程也可能使用這個(gè)整數(shù)
作為另外的IPC資源的關(guān)鍵字.
我知道有人建議是用ftok這個(gè)函數(shù):key_t ftok(const char *path, int id);通過在不同的進(jìn)程間調(diào)用
這個(gè)函數(shù),相同的參數(shù)會(huì)產(chǎn)生相同的key值,然后就可以通信.
我不知道還有沒有別的方法,但是我覺得這個(gè)方法還是有比較大的限制,起碼需要不同的程序間要約定調(diào)
用相同的參數(shù).不知道還有沒有別的方法在不同進(jìn)程之間確定公用的進(jìn)程資源?
在unix中有ipcs這樣的命令來獲取現(xiàn)在系統(tǒng)中的進(jìn)程通信的資源信息,不知道有沒有類似的API能提供這
樣的要求.
不知道windows的剪貼板是怎么實(shí)現(xiàn)的,那么多不同的程序(進(jìn)程)間都能共用這個(gè)公用的資源.
作者:
sakulagi
時(shí)間:
2005-12-27 21:24
兩個(gè)進(jìn)程如果要使用同一個(gè)資源,事先至少要約定一個(gè)雙方都能同意的標(biāo)識(shí),否則怎么通信呢?
當(dāng)然如果系統(tǒng)只有一個(gè)資源,比如剪貼板,那么就不用了,因?yàn)闃?biāo)識(shí)等于是固定的,hard code的。
ipcs的主要功能是通過shmctl, semctl, msgctl函數(shù)來完成的
作者:
newroot_phy
時(shí)間:
2005-12-28 17:57
標(biāo)題:
回復(fù) 1樓 plscareme 的帖子
你想做什么啊, 有些東西不是你覺不安全就不安全的,
IPC中通常有三種方法產(chǎn)生關(guān)鍵字, 1, 指定關(guān)鍵字,2 公用頭文件,3 同一路徑名和ID
應(yīng)該就是這三種
請(qǐng)理解一下什么叫協(xié)議吧!! 程序間不約定,怎么通訊!?
作者:
soi
時(shí)間:
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);
}
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2