ADB管道通信

被刻印的时光 ゝ 提交于 2019-11-26 16:02:33

打開剪貼板:
OpenClipboard
返回值為BOOL,成功返回非0,若失敗或剪貼板被佔用,返回0.
CloseClipboard:關閉
EmptyClipboard:清空
前一個程序調用關閉,後一個程序調用清空后,打開剪貼板的當前窗口才擁有剪貼板。
SetClipboardData向剪貼板中防止數據。
參數:
nFormat:剪貼板格式
hMem:具有指定格式的數據的句柄
-------------------------------------------------------------------
延遲提交技術
-------------
第一次調用SetClipboardData時,將其hMem參數設置為NULL,在剪貼板上以指定的剪貼板格式放置一個
空的剪貼板數據塊。然後直到其他進程需要數據或自身進程需要終止運行時再次調用SetClipboardData函數,這次
才真正提交數據(不需再調用OpenClipboard和EmptyClipboard)
IsClipboardFormatAvailable(format)//檢測剪貼板上是否包含了參數format指定的格式的數據
GetClipboardData(CF_TEXT);//從剪貼板上獲得指定數據
----------------------------------------------------------------------------
匿名管道
----------
匿名管道時未命名的單向管道,通常用來在一個父進程和一個子進程之間傳輸數據。
匿名管道只能實現本地機器上兩個進程之間的通信,而不能實現跨網路的通信。
CreatePipe(



返回值是蓋匿名管道的讀寫句柄。
當調用CreateProcess創建一個子進程時,他將繼承父進程所有打開的句柄。將子進程的特殊句柄設置為管道的
讀寫句柄,將子進程的標準輸入輸出句柄分別設定為管道的讀寫句柄。
GetStdHandle獲取標準輸入、輸出、標準錯誤輸出句柄。
在創建一個新進程時,系統會為該進程建立一個 進程內核對象和一個線程內核對象。每個對象都有使用計數
初始值為1,當CreateProcess函數在其內部打開這些對象時,計數變量變為2,執行CloseHandle,減一,系統終止運行減一。
當計數變為零時,內存釋放,
因為匿名管道沒有名稱,所以只能在父進程中調用CreateProcess函數創建線程時,將管道的讀、寫句柄傳遞給子進程。

進程優先級:
實時(REALTIME) > 高(HIGH) > 高於正常(ABOVE_NORMAL) > 正常(NORMAL) > 低於正常(BELOW_NORMAL) > 空閒(IDEL)
---------------------------------------------------------------------------------------------------
命名管道
---------
不僅可以在本機上實現兩個進程間的通信,還可以跨網絡實現兩個進程間的通信。
命名管道的兩種通信模式:字節模式和消息模式。

對於一個命名管道來說,在某個時刻,它只能與一個客戶端進行通信。

調用CreateNamedPipe函數創建一個命名管道的實例,并返回該命名管道的句柄。
一個命名管道的服務器進程使用該函數創建命名管道的第一個實例,并建立其基本屬性,或創建一個命名管道的新實例。
如需創建 一個命名管道的多個實例,需多次調用CreateNamedPipe函數。

-------------------------------------------------------------------------------
郵槽
424字節以下
-----
郵槽是基于廣播通信体系設計的,采用無連接的不可靠的數據傳輸。郵槽是一种單向的通信机制,創建郵槽的服務器進程讀取數据,打開郵槽的客戶机進程寫入數据。
----------------------------------------------------------------------------------------------------------------------------------------------------


服務器端:
創建管道>>監聽>>讀寫>>關閉

CreateNamedPipe
 
ConnectNamedPipe
 
ReadFile/WriteFile
 
DisconnectNamedPipe

客戶端:
打開命名管道,獲得句柄>>寫入數據>>等待回復
WaitNamedPipe 

SetNamedPipeHandleState

---------------------------------------------------------------------------------------------
I/O模式:
在具有數據流形式的輸入輸出:進程通信、文件輸入輸出,內核通信,網絡通信
異步I/O:Asynchronous
在調用ReadFile/WriteFile等函數后,函數立即返回,線程可以進行其他操作。剩下的I/O操作在系統內核中自動完成。
在系統內核完成輸入輸出後,程序通過以下方式獲得結果:
1.完成函數:Routines
在內核完成I/O后,內核回調該函數,當該函數被調用,及說明內核已經完成I/O,在該函數內可進行I/O完成後所需要的操作。
同步I/O:Synchronous
在調用I/O函數時,系統完成了I/O操作才返回。在操作系統進行I/O操作的過程中,用戶態縣城不能執行。
在同步I/O時,若需要在I/O時進行其他操作當再開啟線程。

-------------------------------------------------------------------------------------------------
PeekNamedPipe函數
 
從命名管道/匿名管道中拷貝數據到一個指定緩衝區,原管道中的數據仍保留;
 
原型 
BOOL WINAPI PeekNamedPipe(
    __in       HANDLE hNamedPipe,    //命名匿名管道句柄
    __out_opt  LPVOID lpBuffer,        //接受從管道中讀取的數據,可以為空;
    __in       DWORD nBufferSize,    //指定lpBuffer的大小;
    __out_opt  LPDWORD lpBytesRead,    //實際接收數據的大小;
    __out_opt  LPDWORD lpTotalBytesAvail,        //管道中所有可讀數據的大小;
    __out_opt  LPDWORD lpBytesLeftThisMessage    //當前消息中剩餘的字節數;
    );
----------------------------------------------------------------------------------------------------

\r、\n、回車

回車換行(\n\r):每次光標移到下一行的行首位置處;
 
?行(\r):每次光標移到本行的行首位置處。

\n:每次光標移到下一行的本位置處
在liniux中打開win文檔,每行尾有“^M”^——Ctrl,M——換行
------------------------------------------------------------------   
代碼:
--------
程序組:

1.剪貼板:Clipboard
2.匿名管道:Child & Parent
3.命名管道:NamedPipeClt & NamedPipeSrv
4.郵槽:MailslotSrv & MailslotClt


 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!