Linux 程序間通訊

2021-08-11 14:37:52 字數 1658 閱讀 3402

1.linux

程序間通訊的目的?

資料傳輸:乙個程序需要將他的資料傳送給另乙個程序,傳送的資料量在乙個位元組到幾兆位元組之間;

共享資料:多個程序想要共享資料,乙個程序對共享資料的修改,別的程序應該立刻看到;

通知事件:乙個程序需要向另乙個或一組程序傳送訊息,通知它發生了某種事件(如程序終止前要通知父程序);

資源共享

:多個程序之間共享同樣的資源。為了做到這一點,需要核心提供鎖和同步機制;

程序控制

:有些程序希望完全控制另乙個程序的執行,此時控制程序希望能夠攔截另乙個程序的所有資訊和異常,並能夠及時知道它的狀態。

2.linux

下程序間通訊的幾種主要方式?

管道和有名管道;

訊號;訊息佇列;共享記憶體;訊號量;套接字。 3.

無名管道與有名管道的優缺點

管道用於具有親緣關係的程序間通訊,使用者自己建立管道,並完成讀寫操作

fifo

可以說是管道的推廣,克服了無名管道的克制,使得無親緣關係的程序同樣可以採用先進先出的通訊機制進行通訊 4.

從管道中怎樣讀取資料?

如果管道的寫端不存在,則認為已經讀到了資料的末尾,讀函式返回的讀出位元組數為0;

當管道的寫端存在時,如果請求的位元組數目大於

pipe_buf

,則返回管道中現有的資料位元組數,如果請求的位元組數目不大於

pipe_buf

,則返回管道中現有資料位元組數,或者返回請求的位元組數。

管道寫端關閉後,寫入的資料將一直存在,直到讀出為止。 5.

怎樣從管道中寫入資料?

向管道中寫入資料,

linux

將不保證寫管道寫入資料。如果讀程序不讀走管道緩衝區的資料,那麼寫操作將一直阻塞。只有當管道的讀端存在時,向管道中寫入資料才有意義。 6.

為什麼讀寫有名

管道,要設定阻塞標誌

對於阻塞寫來說,寫操作在寫滿

fifo

的空閒區域後,會一直等待,直到寫完所有資料為止,請求寫入的資料的最終都會寫入

fifo

7.有名管道與訊息佇列的區別是什麼

訊息佇列:用於訊息,不是簡單的資料資訊傳遞,訊息佇列還包括訊息有優先順序,訊息到達通知等;

管道:低階的通訊機制,訊息佇列比管道高階,無名管道和有名管道依然比較低階,完成高階的應用伺服器還需要訊息佇列等.

8.訊號的本質是什麼?

訊號實在軟體層次上對中斷機制的一種模擬,在原理上,乙個程序收到乙個訊號與處理器收到乙個中斷請求可以說是一樣的。訊號是非同步的,乙個程序不必通過任何操作來等待訊號的到達,事實上,程序也不知道訊號到底什麼時候到達。 9.

傳送訊號的主要函式的作用是什麼

kill:

可以傳送訊號給訊號和程序組,它不僅可以終止程序,也可以向程序傳送其他訊號;

raise()

函式允許程序向自身傳送訊號

alarm()

可以在程序中設定定時器,等到時間到達時,就會向程序發生

sigalarm

訊號,注意的是,乙個程序只有乙個鬧鐘;

pause()

直接將訊號掛起直到捕捉到訊號為止

10.什麼是不可靠訊號。

在訊號的生命週期裡,當乙個非實時訊號傳送給乙個程序時,如果該訊號已經在程序中註冊,則該訊號將被丟棄,造成訊號丟失。因此,非實時訊號又叫做「不可靠訊號」。

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...