日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux下的msg.h頭文件詳解(msg.hlinux)

在 Linux 系統(tǒng)中,msg.h 頭文件是消息隊(duì)列的頭文件,主要包含了建立、關(guān)閉、發(fā)送和接收消息的相關(guān)函數(shù)的聲明。消息隊(duì)列是多個(gè)進(jìn)程之間進(jìn)行異步通信的一種方式,常用于進(jìn)程間通信(IPC)。

本文將對 msg.h 頭文件進(jìn)行詳細(xì)講解,包括消息隊(duì)列的概念、頭文件的結(jié)構(gòu)和函數(shù)使用方法等。

一、消息隊(duì)列的概念

消息隊(duì)列是一種進(jìn)程間通信的方式,它是一段共享內(nèi)存,進(jìn)程可以通過它來傳遞消息。多個(gè)進(jìn)程可以同時(shí)往同一個(gè)消息隊(duì)列中發(fā)送消息和從中讀取消息,并且每個(gè)消息都有一個(gè)類型標(biāo)識。

消息隊(duì)列有以下幾個(gè)特點(diǎn):

1. 消息隊(duì)列是按照先進(jìn)先出的規(guī)則進(jìn)行消息的處理。

2. 消息隊(duì)列中的消息的大小可以自定義,但更大值受系統(tǒng)的限制。

3. 每個(gè)消息都有一個(gè)類型標(biāo)識,可以根據(jù)類型來選擇需要處理的消息。

4. 消息隊(duì)列適合于進(jìn)程間的數(shù)據(jù)量較小,但操作頻繁的場景。

5. 消息隊(duì)列是一種異步通信的方式,不需要等待對方的響應(yīng)。

二、頭文件結(jié)構(gòu)

msg.h 頭文件主要包含了以下幾個(gè)結(jié)構(gòu)體和宏定義:

1. struct msgbuf

該結(jié)構(gòu)體用于保存消息隊(duì)列中的消息,結(jié)構(gòu)體的定義如下:

“`

struct msgbuf {

long mtype; // 消息類型標(biāo)識

char mtext[1]; // 消息內(nèi)容

};

“`

其中,mtype 為消息類型標(biāo)識,是一個(gè)大于 0 的長整型數(shù)值,用于區(qū)分不同類型的消息。mtext 為消息內(nèi)容,是一個(gè)字符數(shù)組,可以保存任意長度的消息。

在使用消息隊(duì)列時(shí),需要根據(jù)實(shí)際情況定義結(jié)構(gòu)體的長度,例如:

“`

struct msgbuf {

long mtype; // 消息類型標(biāo)識

char mtext[1024]; // 消息內(nèi)容

};

“`

2. struct msqid_ds

該結(jié)構(gòu)體用于保存消息隊(duì)列的屬性,結(jié)構(gòu)體的定義如下:

“`

struct msqid_ds {

struct ipc_perm msg_perm; // 消息隊(duì)列的權(quán)限信息

time_t msg_stime; // 最后一次寫入消息隊(duì)列的時(shí)間

time_t msg_rtime; // 最后一次讀取消息隊(duì)列的時(shí)間

time_t msg_ctime; // 消息隊(duì)列的創(chuàng)建時(shí)間

unsigned long msg_cbytes; // 消息隊(duì)列中當(dāng)前的字節(jié)數(shù)

unsigned long msg_qnum; // 消息隊(duì)列中當(dāng)前的消息數(shù)

unsigned long msg_qbytes; // 消息隊(duì)列中允許的更大字節(jié)數(shù)

pid_t msg_lspid; // 最后寫入消息隊(duì)列的進(jìn)程 ID

pid_t msg_lrpid; // 最后讀取消息隊(duì)列的進(jìn)程 ID

};

“`

其中,msg_perm 是消息隊(duì)列的權(quán)限信息,包括擁有者 ID、群組 ID 和權(quán)限標(biāo)志等信息。msg_stime、msg_rtime 和 msg_ctime 分別表示最后一次寫入、讀取和創(chuàng)建消息隊(duì)列的時(shí)間。msg_cbytes 表示消息隊(duì)列中當(dāng)前的字節(jié)數(shù),msg_qnum 表示消息隊(duì)列中當(dāng)前的消息數(shù),而 msg_qbytes 則表示消息隊(duì)列中允許的更大字節(jié)數(shù)。msg_lspid 和 msg_lrpid 分別表示最后寫入和讀取消息隊(duì)列數(shù)據(jù)的進(jìn)程 ID。

3. IPC_PRIVATE

IPC_PRIVATE 是一個(gè)宏定義,用于表示創(chuàng)建一個(gè)新的消息隊(duì)列,其定義如下:

“`

#define IPC_PRIVATE ((__kernel_key_t)0)

“`

當(dāng)使用 IPC_PRIVATE 作為 key 值來創(chuàng)建消息隊(duì)列時(shí),系統(tǒng)將會(huì)為其隨機(jī)生成一個(gè)鍵值,并將該鍵值作為消息隊(duì)列的標(biāo)識符,是一個(gè)唯一的值。這種方式創(chuàng)建的消息隊(duì)列只能在父子進(jìn)程之間進(jìn)行通信。

4. IPC_CREAT

IPC_CREAT 是一個(gè)宏定義,用于表示創(chuàng)建一個(gè)新的消息隊(duì)列或獲取一個(gè)已有的消息隊(duì)列,其定義如下:

“`

#define IPC_CREAT 001000 // 創(chuàng)建新的隊(duì)列或獲取已有隊(duì)列

#define IPC_EXCL 002023 // 與IPC_CREAT一同使用,用于避免消息隊(duì)列編號沖突

“`

當(dāng)使用 IPC_CREAT 和一個(gè)正整數(shù) key 配合使用,系統(tǒng)會(huì)在內(nèi)核的消息隊(duì)列中通過該 key 值查找是否已經(jīng)存在一個(gè)具有相同 key 值的消息隊(duì)列。如果不存在,則創(chuàng)建一個(gè)新的消息隊(duì)列,并返回該消息隊(duì)列的標(biāo)識符;如果已經(jīng)存在,則返回該消息隊(duì)列的標(biāo)識符。當(dāng)同時(shí)使用 IPC_CREAT 和 IPC_EXCL 標(biāo)志時(shí),如果已經(jīng)存在一個(gè)具有相同 key 值的消息隊(duì)列,則創(chuàng)建操作將失敗,返回 -1。

三、消息隊(duì)列相關(guān)函數(shù)

msg.h 頭文件中包含了多個(gè)函數(shù),用于創(chuàng)建、添加、獲取和刪除消息隊(duì)列。其中,常用函數(shù)有:

1. int msgget(key_t key, int msg);

該函數(shù)用于創(chuàng)建或獲取一個(gè)消息隊(duì)列,其參數(shù) key 用于指定消息隊(duì)列的鍵值,msg 用于指定消息隊(duì)列的訪問權(quán)限和創(chuàng)建方式。返回消息隊(duì)列的標(biāo)識符,出錯(cuò)返回 -1。

2. int msgsnd(int msqid, const void *msgp, size_t msgsz, int msg);

該函數(shù)用于向指定消息隊(duì)列中添加消息,其參數(shù) msqid 為消息隊(duì)列的標(biāo)識符,msgp 為消息的指針,msgsz 為消息的長度,msg 為消息的標(biāo)志。返回成功添加消息的長度,出錯(cuò)返回 -1。

3. ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msg);

該函數(shù)用于從指定消息隊(duì)列中讀取消息,其參數(shù) msqid 為消息隊(duì)列的標(biāo)識符,msgp 為消息的指針,msgsz 為消息的長度,msgtyp 為消息類型標(biāo)識,msg 為消息的標(biāo)志。返回讀取到的消息的長度,出錯(cuò)返回 -1。

4. int msgctl(int msqid, int cmd, struct msqid_ds *buf);

該函數(shù)用于控制指定消息隊(duì)列的屬性,其參數(shù) msqid 為消息隊(duì)列的標(biāo)識符,cmd 為操作命令,buf 為消息隊(duì)列的屬性結(jié)構(gòu)體指針。返回成功為 0,出錯(cuò)返回 -1。

其中,cmd 可以設(shè)置為以下值:

– IPC_RMID:刪除指定的消息隊(duì)列;

– IPC_STAT:獲取指定的消息隊(duì)列的屬性;

– IPC_SET:設(shè)置指定的消息隊(duì)列的屬性。

四、使用示例

下面是一個(gè)簡單的使用消息隊(duì)列的示例程序:

“`

#include

#include

#include

#include

#include

#include

#include

struct msgbuf {

long mtype;

char mtext[1024];

};

int mn() {

int msgid;

key_t key;

struct msgbuf buf;

// 創(chuàng)建一個(gè)新的消息隊(duì)列,并獲取其標(biāo)識符

key = ftok(“.”, ‘a(chǎn)’);

msgid = msgget(key, IPC_CREAT | 0666);

if (msgid == -1) {

printf(“msgget error: %s\n”, strerror(errno));

exit(1);

}

// 添加三個(gè)消息

buf.mtype = 1;

strcpy(buf.mtext, “message 1”);

if (msgsnd(msgid, &buf, strlen(buf.mtext), 0) == -1) {

printf(“msgsnd error: %s\n”, strerror(errno));

exit(1);

}

buf.mtype = 2;

strcpy(buf.mtext, “message 2”);

if (msgsnd(msgid, &buf, strlen(buf.mtext), 0) == -1) {

printf(“msgsnd error: %s\n”, strerror(errno));

exit(1);

}

buf.mtype = 1;

strcpy(buf.mtext, “message 3”);

if (msgsnd(msgid, &buf, strlen(buf.mtext), 0) == -1) {

printf(“msgsnd error: %s\n”, strerror(errno));

exit(1);

}

// 讀取消息隊(duì)列中的消息

while(1) {

if (msgrcv(msgid, &buf, 1024, 0, IPC_NOWT) != -1) {

printf(“recvd msg: %s\n”, buf.mtext);

} else {

if (errno != ENOMSG) {

printf(“msgrcv error: %s\n”, strerror(errno));

}

break;

}

}

// 刪除消息隊(duì)列

if (msgctl(msgid, IPC_RMID, NULL) == -1) {

printf(“msgctl error: %s\n”, strerror(errno));

exit(1);

}

return 0;

}

“`

該程序使用 ftok 函數(shù)生成一個(gè)新的鍵值,并調(diào)用 msgget 函數(shù)創(chuàng)建一個(gè)新的消息隊(duì)列,然后使用 msgsnd 函數(shù)向消息隊(duì)列中添加三個(gè)消息,消息類型分別為 1、2 和 1。接著使用 msgrcv 函數(shù)從消息隊(duì)列中讀取所有的消息,并輸出到標(biāo)準(zhǔn)輸出的終端上。最后使用 msgctl 函數(shù)刪除該消息隊(duì)列。

五、

相關(guān)問題拓展閱讀:

  • windows與linux 頭文件對照
  • Ros中msg創(chuàng)建.h的問題

windows與linux 頭文件對照

別折騰了,重寫吧……

1.linux和windows平臺下,能夠?qū)?yīng)的頭文件就是符合C11標(biāo)準(zhǔn)的頭文件。其他的頭文件不僅和平臺有關(guān)系握畝搏,還和平臺下的編譯環(huán)境有關(guān),很難畫上等號的。

2.C語言符合標(biāo)準(zhǔn)的頭文件

#include //設(shè)定插入點(diǎn)

#include //字符處理

#include //定義錯(cuò)誤碼

#include //浮點(diǎn)數(shù)處理

#include //文件輸入/輸出

#include //參數(shù)化輸入/輸出

#include //數(shù)據(jù)流輸入/輸出

#include //定義各種數(shù)據(jù)類型最值常量

#include //定義本地化函數(shù)

#include //定義數(shù)學(xué)函數(shù)

#include //定義輸入/輸出函數(shù)

#include //定義雜項(xiàng)函數(shù)及內(nèi)存分配函數(shù)

#include //字符串處理

#include //基于數(shù)組的輸入/輸出

#include //定義關(guān)于時(shí)間的函數(shù)

#include //寬字符處理及輸入/輸出

#include //寬字符分類

3.linux常用頭文件如下:

POSIX標(biāo)準(zhǔn)定義的頭文件

目錄項(xiàng)

文件控制

文件名匹配類型

路徑名模式匹配類型

組文件

網(wǎng)絡(luò)數(shù)段祥據(jù)庫操作

口令文件

正則表達(dá)式

TAR歸檔值

終端I/O

符號常量

文件時(shí)間

字符擴(kuò)展類型

INTERNET定義

套接字本地接口

INTERNET地址族

傳輸控制協(xié)議定義

內(nèi)存管理聲明

Select函數(shù)

套接字借口

文件狀態(tài)

進(jìn)程時(shí)間

基本系統(tǒng)數(shù)據(jù)類型

UNIX域套接字定義

系統(tǒng)名

進(jìn)程控制

POSIX定義的XSI擴(kuò)展頭文件

cpio歸檔值

動(dòng)態(tài)鏈接

消息顯示結(jié)構(gòu)

文件樹漫游

代碼集轉(zhuǎn)換使用程序

語言信息常量

模式匹配函數(shù)定義

貨幣類型

數(shù)據(jù)庫操作

消息類別

輪詢函數(shù)

搜索表

字符耐舉串操作

系統(tǒng)出錯(cuò)日志記錄

用戶上下文

用戶限制

用戶帳戶數(shù)據(jù)庫

IPC(命名管道)

消息隊(duì)列

資源操作

信號量

共享存儲

文件系統(tǒng)信息

時(shí)間類型

附加的日期和時(shí)間定義

矢量I/O操作

POSIX定義的可選頭文件

異步I/O

消息隊(duì)列

線程

執(zhí)行調(diào)度

信號量

實(shí)時(shí)spawn接口

XSI STREAMS接口

事件跟蹤

看看紅旗linux,他們出的書具體不太記得了,不過畢竟是中國做得更好的,多看看有幫助。

Linux的一般接口在《Unix環(huán)境高級編程》中有詳細(xì)的描述。

關(guān)于socket,請看《Unix網(wǎng)絡(luò)編程》一書。

如果用型晌圖形界面,那么Linux下通常采用的是GDK和Qt兩個(gè)庫,也就是說,如果你在Windows下使散租慧用了包含圖形界面的庫函數(shù),那么你就必須修改你的所有函數(shù)調(diào)用的實(shí)現(xiàn),而不僅僅是替換頭文件。

要做跨平臺的程序,我推薦你使用沖答Qt,它用C++寫成,對于圖形界面的操作可以直接在Win\Mac\*nix等各種平臺下使用。

祝你好運(yùn)!

應(yīng)該差不多的

Ros中msg創(chuàng)建.h的問題

在安裝好ROS后,接著學(xué)習(xí)如何創(chuàng)建節(jié)點(diǎn)和節(jié)點(diǎn)之間的通信方式,以一個(gè)簡瞎唯穗單的主題發(fā)布節(jié)點(diǎn)和主題訂閱節(jié)點(diǎn)說明。節(jié)點(diǎn)是連接ROS網(wǎng)絡(luò)等可執(zhí)行文件,是實(shí)現(xiàn)某山信些功能的軟件包,也是一個(gè)主要計(jì)算執(zhí)磨卜行的進(jìn)程。

wiki教程上說,在xml和CMakeLists文件里添加相關(guān)依鏈差賴以后,編譯,.msg文件會(huì)被轉(zhuǎn)化成.h文件。

這激碼就是為什么只看源碼找不到部分

頭文件

的原因。你看看是不是xml里沒加build_depends,棚鉛皮或者CMakeLists里面沒加find_packge.

自己測試結(jié)果如下,當(dāng)你按照wiki教程吵悶寫好cmakelist.txt之后,枝仿之一次catkin_make會(huì)生成Num.h。之后就可以猛碰纖 #include 了。

關(guān)于msg.h linux的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


當(dāng)前名稱:Linux下的msg.h頭文件詳解(msg.hlinux)
標(biāo)題URL:http://www.5511xx.com/article/cojhgpd.html