程序間的通訊之管道

2021-07-25 01:24:13 字數 1059 閱讀 3711

程序之間的通訊,管道,套接字,共享記憶體,訊號,訊號量等。

套接字適用範圍很廣,用於兩個主機之間的兩個程序的通訊,一台主機的兩個程序也可以進行通訊,例如資料庫,與資料庫建立連線通訊就是和資料庫進行socket通訊。

訊號,如kill向程序傳送訊號,在linux下向程序發松9號訊號用於殺死程序kill -9 pid

訊號量,用於控制程序的同步,使得整個程序間前向推進

共享記憶體,共享的是物理記憶體,兩個程序通過位址對映,對映到相同的一塊位址空間。

管道分為有名管道和無名管道,有名管道類似於建立乙個檔案使得任意兩程序之間可以進行通訊。而無名管道的生存依賴與程序的生命週期,無名管道的適用面小於有名管道,只適用與有親緣關係的程序,比如通過fork()函式產生的程序,父程序子程序等等

通過有名管道兩個程序之間相互通訊

讀取管道中資訊的程序:

int main()

; while(1)

printf("%s", buf);

memset(buf, 0, 128);

} return 0;

}

為管道傳送資訊的程序:

int main()

; while(1)

memset(buf,0,128);

} return 0;

}

在linux下,建立管道的命令:mkfifo 管道名,還有建立管道的函式mkfifo可提供程式建立管道

無名管道用於程序間的通訊:

int main()

; read(fd[0], buff, 127);

printf("the child is %s\n", buff);

close(fd[0]);

} else//父程序從其中寫資料

; fgets(buff, 127, stdin);

write(fd[1], buff, strlen(buff));

close(fd[1]);

} exit(0);

}

程序間通訊 之 管道

一 無名管道 特點 具有親緣關係的程序間通訊,但不僅僅指父子程序之間哦。1 無名管道的建立 int pipe int pipefd 引數 pipefd 陣列的首位址 返回值 成功返回0,失敗返回 1 注意 無名管道存在核心空間,建立成功會給使用者空間兩個檔案描述符,fd 0 讀管道 fd 1 寫管道...

程序間通訊之管道

我們將乙個程序到另乙個程序的資料流稱為管道,它是程序間通訊最古老的方式。管道分為兩種 匿名管道與命名管道。匿名管道 顧名思義,所謂的匿名管道自然就是沒有名字的管道,這種管道通常用於有親緣關係的程序間的通訊。匿名管道通常由pipe函式來建立,當乙個程序建立了乙個匿名管道後,它們的模型就是這樣的 可以看...

程序間通訊之管道

既然要介紹程序間通訊,首先來看看什麼是程序間通訊 2.程序間通訊的目的 1 資料傳輸 乙個程序需要將它的資料傳送給另乙個人程序 2 資源共享 多個程序共享同樣的資源 3 通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它 它們 發生了某種事件 4 程序控制 有些程序希望完全控制某些程序的執行,...