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