亚洲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