Linux程序間通訊 套接字

2021-09-06 19:40:45 字數 2769 閱讀 8261

socket

也是一種程序間的通訊機制,不過它與其他通訊方式主要的區別是:它可以實現不同主機間的程序通訊。乙個套介面可以看做是程序間通訊的端點(

endpoint

),每個套介面的名字是唯一的;其他程序可以訪問,連線和進行資料通訊。

套介面(

socket

)程式設計是實現

linux

系統和其他大多數作業系統中程序間通訊的主要方式之一。我們熟知的

www服務、

ftp服務、

telnet

服務等都是基於套介面程式設計來實現的。除了在異地的計算機程序間以外,套介面同樣適用於本地同一臺計算機內部的程序間通訊。關於套介面的經典教材同樣是

richard stevens

編著的《

unix

網路程式設計:聯網的

api和套接字》,清華大學出版社出版了該書的影印版。它同樣是

linux

程式設計師的必備書籍之一。

關於這一部分的內容,可以參照本文作者的另一篇文章《設計自己的網路螞蟻》,那裡由常用的幾個套介面函式的介紹和示例程式。這一部分或許是

linux

程序間通訊程式設計中最須關注和最吸引人的一部分,畢竟,

internet

正在我們身邊以不可思議的速度發展著,如果乙個程式設計師在設計編寫他下乙個程式的時候,根本沒有考慮到網路,考慮到

internet

,那麼,可以說,他的設

計很難成功。

3 linux

的程序和

win32

的程序/

執行緒比較

熟悉win32

程式設計的人一定知道,

win32

的程序管理方式與

linux

上有著很大區別,在

unix

裡,只有程序的概念,但在

win32

裡卻還有乙個"執行緒

"的概念,那麼

linux

和win32

在這裡究竟有著什麼區別呢?

win32

裡的程序

/執行緒是繼承自

os/2

的。在win32裡,"

程序"是指乙個程式,而"執行緒

"是乙個"程序

"裡的乙個執行"線索

"。從核心上講,

win32

的多程序與

linux

並無多大的區別,在

win32

裡的執行緒才相當於

linux

的程序,是乙個實際正在執行的**。但是,

win32

裡同乙個進

程裡各個執行緒之間是共享資料段的。這才是與

linux

的程序最大的不同。

下面這段程式顯示了

win32

下乙個程序如何啟動乙個執行緒。

int g;

dword winapi childprocess( lpvoid lpparameter )

exitthread( 0 );

};void main()

在win32

下,使用

createthread

函式建立執行緒,與

linux

下建立程序不同,

win32

執行緒不是從建立處開始執行的,而是由

createthread

指定乙個函式,執行緒就從那個函式處開始執行。此程式同前面的

unix

程式一樣,由兩個執行緒各列印

1000

條資訊。

threadid

是子執行緒的執行緒號,另外,全域性變數

g是子執行緒與父執行緒共享的,這就是與

linux

最大的不同之處。大家可以看出,

win32

的程序/

執行緒要比

linux

複雜,在

linux

要實現類似

win32

的執行緒並不難,只要

fork

以後,讓子程序呼叫

threadproc

函式,並且為全域性變數開設共享

資料區就行了,但在

win32

下就無法實現類似

fork

的功能了。所以現在

win32下的c

語言編譯器所提供的庫函式雖然已經能相容大多數

linux/unix

的庫函式,但卻仍無法實現

fork

。  對於多工系統,共享資料區是必要的,但也是乙個容易引起混亂的問題,在

win32

下,乙個程式設計師很容易忘記執行緒之間的資料是共享的這一情況,乙個執行緒修

改過乙個變數後,另乙個執行緒卻又修改了它,結果引起程式出問題。但在

linux

下,由於變數本來並不共享,而由程式設計師來顯式地指定要共享的資料,使程式變

得更清晰與安全。

至於win32的"

程序"概念,其含義則是

"應用程式

",也就是相當於

unix

下的exec

了。  

linux

也有自己的多執行緒函式

pthread

,它既不同於

linux

的程序,也不同於

win32

下的程序,關於

pthread

的介紹和如何在

linux

環境下編寫多執行緒程式我們將在另一篇文章《

linux

下的多執行緒程式設計》中講述。

Llinux程序間通訊 AF UNIX 套接字程式設計

af unix 位址系列 使用 af unix 或 af unix ccsid 位址系列的套接字 可以是面向連線的 型別 sock stream 也可以是無連線的 型別 sock dgram 兩種型別都很可靠,原因是沒有連線兩個程序的外部通訊函式。unix 域資料報套接字的執行方式與 udp 資料報...

程序間的通訊之套接字

應用層 表示層會話層 傳輸層 決定傳輸特性 網路層 決定傳輸方式 資料鏈路層 封裝資料報 軟體介面卡 物理層傳輸層網路 socket 插座 通訊需要1對1的意思 tcp 傳輸控制協議 使用與傳輸質量要求較高,傳輸大量資料的通訊通訊 高可靠性 udp 效率高,實時性 建立套接字 int fd sock...

Linux程序間通訊 使用流套接字

前面說到的程序間的通訊,所通訊的程序都是在同一臺計算機上的,而使用socket進行通訊的程序可以是同一臺計算機的程序,也是可以是通過網路連線起來的不同計算機上的程序。通常我們使用socket進行網路程式設計,這裡將會簡單地講述如何使用socket進行簡單的網路程式設計。一 什麼是socket soc...