Lesson2 程序通訊

2021-05-23 23:37:44 字數 1785 閱讀 4547

linux程序間通訊方式包括:

1.管道(pipe)和有名管道(fifo)

2.訊號(signal)

3.訊息佇列

4.共享記憶體

5.訊號量

6.套接字(socket)

管道通訊

單向的、先進先出

乙個程序(寫程序)在管道的尾部寫入資料,另乙個程序(讀程序)從管道頭部讀出資料

無名管道只能用於父子程序間通訊,有名管道用於同一系統中的任意2個程序間的通訊

無名管道由pipe()函式建立

int pipe(int filedis[2]);

當乙個管道建立時,它會建立2個檔案描述符

filedis[0]用於讀管道,filedis[1]用於寫管道

關閉管道--close函式

必須在呼叫fork()前呼叫pipe(),否則子程序將不會繼承檔案描述符

命名管道

#include

#include

int mkfifo(const char *pathname, mode_t omde)

pathname: fifo檔名

mode:  屬性

建立了乙個fifo就可以用open開啟它,一般的檔案訪問函式(close、read、write等)都可以用於fifo

訊號通訊

訊號(signal)

某些按鍵

硬體中斷

kill函式將訊號傳送給

另乙個程序

kill命令傳送訊號

訊號處理:

忽略此訊號--sigkill和這2個訊號們向超級使用者提供了一種終止或停止程序的方法(sig_ign)

執行使用者希望的動作--發生某訊號時,呼叫乙個使用者函式,函式中執行使用者希望的處理(函式

名)執行系統預設動作--預設動作時終止該程序(sig_dfl)

#include

void (*signal (int signo, void (*func)(int)))(int)

void (*)(int)

signal (int signo, void (*func)(int))

拆分完為2個函式指標

typedef void (*sighandler_t)(int)

sighandler_t signal(int signum, sighandler_t handler)

func可能的值:1.sig_ign;2.sig_dfl;3.訊號處理函式名

訊號發生函式:kill、raise、alarm

kill [-s signal] pid 向指定的程序傳送指定的訊號

共享記憶體通訊

共享記憶體:被多個程序共享的一部分物理記憶體。

實現分兩個步驟:

1.建立共享記憶體,使用shmget函式

2.對映共享記憶體,將這段建立的共享記憶體對映到具體的程序空間去,使用shmat函式

int shmget(key_t key, int size, int shm***)

key取:ipc_private--建立一塊新的共享記憶體

成功返回共享記憶體識別符號;如果失敗,返回-1

int shmat(int shmid, char *shmaddr, int flag)

shmid

shmget函式返回的共享儲存識別符號

flag

決定以什麼方式來確定對映位址(通常為0)

成功則返回共享記憶體對映到程序中的位址,失敗則返回-1

int shmdt(char *shmaddr)

當程序不再需要共享記憶體時,需要把它從程序位址空間中脫離

Lesson2標準庫型別

一 string 型別 string物件的定義和初始化 string s1 string s2 s1 string s3 value string s4 n,c 二 標準vector型別 1.vector不是一種資料型別,而只是乙個類模板。可以用來定義任意多種資料型別 vector和 vector才...

Lesson 2 基本資料型別

在學習資料型別之前,需要了解乙個基礎知識,計算機的記憶體由位 bit 組成,每一位都表示乙個二進位制數0或1。在儲存單位中,1gb 2 10mb 2 20kb 2 30byte 2 33bit。一 資料的分類 大小和初始化 1 字元型 char 2 布林型 bool 3 整形 有short,int,...

lesson2 執行緒的創造和生命

1.執行緒id 執行緒程序 識別符號型別 pthread t pid t 獲取id pthread self getpid 建立pthread create fork pthread t在linux中是unsigned long int型別 2.pthread self的使用 3.pthread c...