linux c之通过消息队列实现进程通信
1、消息隊(duì)列的介紹
消息隊(duì)列提供了一種從一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)送一個(gè)數(shù)據(jù)塊的方法。 每個(gè)數(shù)據(jù)塊都被認(rèn)為含有一個(gè)類型,接收進(jìn)程可以獨(dú)立地接收含有不同類型的數(shù)據(jù)結(jié)構(gòu)。我們可以通過發(fā)送消息來避免命名管道的同步和阻塞問題。但是消息隊(duì)列與命名管道一樣,每個(gè)數(shù)據(jù)塊都有一個(gè)最大長度的限制,Linux用宏MSGMAX和MSGMNB來限制一條消息的最大長度和一個(gè)隊(duì)列的最大長度。
2、消息隊(duì)列需要使用的API介紹
1、msgget函數(shù)
該函數(shù)用來創(chuàng)建和訪問一個(gè)消息隊(duì)列。它的原型為:
int msgget(key_t, key, int msgflg);
與其他的IPC機(jī)制一樣,程序必須提供一個(gè)鍵來命名某個(gè)特定的消息隊(duì)列。msgflg是一個(gè)權(quán)限標(biāo)志,表示消息隊(duì)列的訪問權(quán)限,它與文件的訪問權(quán)限一樣。msgflg可以與IPC_CREAT做或操作,表示當(dāng)key所命名的消息隊(duì)列不存在時(shí)創(chuàng)建一個(gè)消息隊(duì)列,如果key所命名的消息隊(duì)列存在時(shí),IPC_CREAT標(biāo)志會(huì)被忽略,而只返回一個(gè)標(biāo)識符。
它返回一個(gè)以key命名的消息隊(duì)列的標(biāo)識符(非零整數(shù)),失敗時(shí)返回-1.
2、msgsnd函數(shù)
該函數(shù)用來把消息添加到消息隊(duì)列中。它的原型為:
msgid是由msgget函數(shù)返回的消息隊(duì)列標(biāo)識符。
總結(jié)
以上是生活随笔為你收集整理的linux c之通过消息队列实现进程通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux c之提示format‘%d’
- 下一篇: linux c之((void *) -