程序通訊是指在程序間傳輸資料(交換資訊)。程序是分配系統資源的單位(包括記憶體位址空間),因此各程序擁有的記憶體位址空間相互獨立,而且為了保證安全,乙個程序不能直接訪問另外乙個程序的位址空間。程序通訊分為三種方式:共享記憶體模式、訊息傳遞模式、共享檔案模式。
程序通訊採用共享記憶體方式時,作業系統會在記憶體中開闢一塊共享空間,允許通訊程序對其互斥的訪問(即 同一時間只允許乙個程序訪問該共享空間,互斥訪問可以通過作業系統提供的工具實現)。
共享儲存方式還分為了兩種,分別是基於資料結構的共享、基於儲存區的共享。
基於資料結構的共享
共享空間的資料格式有所限制,如 共享空間只能放乙個長度為10的陣列。這種共享方式速度慢、限制多、是一種低階通訊方式。
基於儲存區的共享
資料的形式、存放位置都由程序控制,而不是作業系統。相比之下,這種共享方式速度更快,是一種高階通訊方式。
管道是指用於連線讀寫程序的乙個共享檔案,又名pipe檔案。程序通訊採用管道通訊方式時,作業系統會在記憶體中開闢的乙個大小固定的緩衝區,程序需要按照"管道通訊規則"進行通訊。
管道通訊規則
1 一條管道只能實現半雙工通訊,即 某一時間段內只能實現單向的資料傳輸。
2 各個程序只能互斥的訪問管道,即 當乙個程序在寫的時候,另外乙個程序不能讀,反之亦然。
3 資料會以字元流的形式寫入管道,當管道寫滿時,寫程序的write()系統呼叫將會被阻塞,直到讀程序將資料取走;當讀程序將資料全部取走後,管道變空,此時讀程序的read()系統呼叫將被阻塞。
4 如果沒寫滿,就不允許讀;如果沒讀空,就不允許寫。
程序通訊採用訊息傳遞方式時,程序間的資料交換會以格式化的資訊 (message) 為單位。程序通過作業系統提供的"傳送訊息/接受訊息"兩個原語進行資料交換。
程序通訊基礎03 Linux訊號(一)
struct sigaction結構體 例子ctrl c 2 sigint 終止 中斷 int interrupt ctrl z 20 sigtstp 暫停 停止 t terminal 終端。ctrl 3 sigquit 退出 除0操作 8 sigfpe 浮點數例外 f float 浮點數。非法訪問...
03 linux下程序通訊 共享記憶體
接下來我們介紹一種簡單而高效的程序間通訊的方式!共享記憶體 注意了是通訊也就是資料交換,如果要想避免同時讀寫發生的同步問題就得需要其他機制!在實際程式設計中,常用的同步機制有 訊號量 傳遞訊息 使用管道或ipc訊息 生成訊號。但是在這次的實現裡面我們用自己提供的非常醜陋的同步標誌written by...
03執行緒通訊
必須配合synchronized使用,wait方法釋放鎖,notify方法不釋放鎖 喚醒乙個等待執行緒 如下 中,執行緒t1啟動,當main執行緒修改state引數為false時,t1執行緒應該跳出迴圈並列印變數 i 的值,但執行發現並沒有,t1執行緒並沒有發現state引數被更改,原因是 執行緒之...