C 程序通訊之命名管道

2021-07-25 11:45:35 字數 1418 閱讀 4757

命名管道通過網路來完成程序間通訊,它遮蔽了底層的網路協議細節。

採用命名管道完成程序通訊的過程為:

1.在伺服器端呼叫createnamedpipe建立命名管道之後,呼叫connectnamedpipe函式讓伺服器程序等待客戶端程序連線到該命名管道的例項上。

2.在客戶端,首先呼叫waitnamedpipe函式判斷當前是否有可以利用的命名管道例項,如果有就呼叫createfile函式開啟該命名管道的例項,並建立乙個連線。

之後就可以通過readfile、writefile進行通訊。

一、伺服器端程式

private:

handle m_hpipe;//命名管道例項控制代碼

void cnamedpipesrcview::onpipecreate()

//建立匿名的人工重置事件物件

handle hevent;

hevent = createevent(null, true, false,null);

if (!hevent)

ovlap.hevent = hevent;

//等待客戶端請求的到來

if (!connectnamedpipe(m_hpipe, &ovlap)) }

if (wait_failed == waitforsingleobject(hevent, infinite))

closehandle(hevent);//執行到這一步,說明已經有客戶端連上命名管道例項,不再需要該事件物件控制代碼

}void cnamedpipesrcview::onpiperead()

messagebox(buf);

}void cnamedpipesrcview::onpipewrite()

}

二、客戶端程式

private:

handle m_hpipe;//命名管道例項控制代碼

void cnamedpipeclientview::onpipeconnect()

//開啟可用的命名管道,並與伺服器端程序進行通訊

m_hpipe = createfile("\\\\.\\pipe\\mypipe",

generic_read|generic_write,

0,null,open_existing, file_attribute_normal, null);

if (invalid_handle_value == m_hpipe) }

void cnamedpipeclientview::onpiperead()

else

}void cnamedpipeclientview::onpipewrite()

}

程序通訊之命名管道 FIFO

匿名管道只能於有血緣關係的程序,那麼倆個沒有任何關係的程序怎麼通訊,這就出現了命名管道來克服這一問題。命名管道是乙個裝置檔案,只要訪問該路徑,就能通過這個共享資源來互相通訊。fifo是按照先進先出的原則工作的,第乙個被寫入的資料第乙個先被讀出。fifo可被用於複製序列管道命令之間的輸出流,於是也就不...

程序通訊 命名管道

handle winapi createnamedpipe in lpctstr lpname,名稱 必須為 pipe pipename格式,表示本地主機,如需聯網,就用主機名 in dword dwopenmode,開啟方式這裡用雙工pipe access duplex in dword dwpi...

程序通訊1 管道 命名管道

匿名管道 管道是一種簡單的程序通訊 ipc 機制。管道實質上就是pipe函式在核心中開闢了一段緩衝區,有乙個讀端和乙個寫端。兩個程序之間能夠通訊的本質 通過fork函式傳遞檔案描述符 子程序是父程序的副本,父程序所有開啟的檔案描述符都被複製到子程序中,父子程序的每個相同的開啟描述符共享乙個檔案表項 ...