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...