UNIX系統通訊 學習筆記(一)

2021-08-30 08:13:48 字數 3217 閱讀 7547

unix系統通訊--學習筆記

1.ipc

--ipc系統簡介

-ipc程序間通訊(interprocess communication)

1.訊息佇列(message queue,q):應用與不同程序間少量資料的順序共享

2.訊號量(semaphore,s):應用與程序之間的同步與互斥的控制

3.共享記憶體(share memory,m):應用與程序之間大批量資料的隨即共享訪問

1.1 查詢ipc物件

shell命令ipcs查詢當前系統的ipc物件資訊

命令:ipcs[options]

-q 只查詢ipc物件中的訊息佇列

-s 只查詢ipc物件中的訊號量

-m 只查詢ipc物件中的共享記憶體

-a 查詢ipc物件的全部屬性

預設 -qsm

ipc物件的標識號id:

-標識號為非負整數,unix通過標識號在系統唯一確定ipc物件。

-不同型別ipc物件的標識號可以相同,但同型別ipc物件的標識號一定唯一。

ipc物件的關鍵字key

-建立ipc物件,必須指定乙個ipc關鍵字,為乙個32位的整數。

1.2 刪除ipc物件

shell命令ipcrm可以刪除ipc物件資訊

命令:ipcrm[options]

-q id 刪除標識號為id的訊息佇列

-q key 刪除關鍵字為key的訊息佇列

-s id 刪除標識號為id的訊號量

-s key 刪除關鍵字為key的訊號量

-m id 刪除標識號為id的共享記憶體

-m key 刪除關鍵字為key的共享記憶體

ipcs -aq | grep 1234

chmod 777 msg_msgsnd1

./msg_msgsnd1

ipcsrm -q 1966292

ipcsrm -q 1234

1.3 ipc結構

/usr/include/sys/ipc.h

/* common ipc structures */

struct ipc_perm

1.4 ipc核心限制

-訊息佇列:訊息的最大長度,佇列最大位元組數,訊息總數。

-訊號量:最多可用訊號量集,每個訊號量集中最多的訊號量個數,可用的訊號量最大數。

--訊息佇列簡介

-先進先出的佇列資料結構,是乙個鍊錶。

2.1 訊息佇列結構

/usr/include/sys/msg.h

struct msqid_ds

;

ipcs -aq

2.2 訊息結構

/usr/include/sys/msg.h

struct msg

;struct msgbuf

;

--訊息佇列函式介紹

3.1 訊息佇列的建立

int msgget(key_t key,int msg***);

-引數key是訊息佇列一關鍵字,具有唯一性。

-引數msg***的低9位指定了佇列的屬主,屬組和其他使用者的訪問許可權,引數msg***的其他位指定了

訊息佇列的建立方式。

* ipc_create:建立訊息佇列,若存在就開啟。

* ipc_excl:同ipc_create一起使用,建立乙個不存在的訊息佇列,若存在則函式呼叫失敗。

vi msg_msgget.c

#include

#include

#include

#include

#include

extern int errno;

struct mymsgbuf

void main()

}

ipcs -q | grep 1234

cc -o msg_msgget msg_msgget.c

l msg_msgget

./msg_msgget

ipcs -aq | grep 1234

3.2 訊息佇列的傳送

int msgsnd(int msqid,struct msgbuf *msgp,int msgsz,int msg***);

* 引數msqid指定了傳送訊息佇列的標識號。

* 引數msgp指向儲存傳送訊息內容的記憶體位址。

* 引數msgsz指定傳送訊息資料的長度,不包括訊息型別部分。

* 引數msg***控制訊息傳送的方式。

* ipc_nowait:訊息採用非阻塞方式傳送。

造成msgsnd()等待的條件有兩種:

1.訊息佇列滿:當前訊息的大小與當前訊息佇列中的位元組數之和超過了訊息佇列的總容量。

msg_cbytes + msgsz > msg_qbytes

2.訊息總數滿:系統中所有的訊息佇列的訊息總數已經達到了作業系統的上限值。

vi msg_msgsnd.c

#include

#include

#include

#include

#include

extern int errno;

struct mymsgbuf

void main()

while(strncmp(buf.ctext,"exit",4))}}

cc -o msg_msgsnd msg_msgsnd.c

ipcs -aq | grep 1234

ipcrm -q 1234

./msg_msgsnd

ipcs -aq | grep 1234

3.3 訊息佇列的接收

3.4 訊息佇列的控制

--訊息佇列的常見應用模型

4.1 單訊息佇列完成(對等程序間)的雙向通訊

4.2 雙訊息佇列完成(對等程序間)的雙向通訊

4.3 多訊息佇列完成(對等程序間)的雙向通訊

4.4 單訊息佇列完成(客戶-伺服器程序間)的雙向通訊

4.5 雙訊息佇列完成(客戶-伺服器程序間)的雙向通訊

4.6 多訊息佇列完成(客戶-伺服器程序間)的雙向通訊

2.socket

3.tuxedo

Unix和Windows跨系統通訊程式設計2

四 跨系統通訊程式設計例項 下面通過乙個例項來具體說明 socket 在unix 和windows 跨系統通訊程式設計中的應用。在一台計算機上執行服務端程式,同一網路的其他計算機上執行客戶端程式,登入到伺服器上,各個客戶之間就可以聊天了。1.服務端 服務端用名為 client 的整型陣列記錄每個客戶...

android系統 通訊錄路徑

在 data data com.android.providers.contacts存放了通訊錄的資訊,其中資料庫是採用sqlite。data data com.android.providers.包含了android自帶的一些功能。com.android.providers.calendar是日曆...

kernel與檔案系統通訊

在linux的 proc檔案下生成乙個模組,用於kernel與檔案系統進行資料互動 makefile檔案內容如下 makefile 3.2.0 obj m myproctest.o kernel home wireless documents mydnew update linux 3.2.0 pw...