c語言程式設計之訊息佇列

2021-08-30 10:38:10 字數 3300 閱讀 3041

#include

#include

#include

#include

#include

#define msgkey 1000

struct msgstru

;main()

}slqmsg.msgtype = 100;

strcpy(slqmsg.msgtext,"hello mcfeng.");

ilrc = msgsnd(imsgid, &slqmsg, sizeof(struct msgstru),ipc_nowait);

if( ilrc < 0 )

ilrc = msgrcv(imsgid,&slrcvmsg,sizeof(struct msgstru),0,0);/*接收訊息佇列*/

printf("text=[%s]\n",slrcvmsg.msgtext);

msgctl(imsgid,ipc_rmid,0); /* 刪除訊息佇列 */

exit(0);

}

#include

#include

#include

#include

#include

#define msgkey 1024

struct msgstru

;main()

ilrc = msgrcv(imsgid,&slrcvmsg,sizeof(struct msgstru),0,0);/*接收訊息佇列*/

printf("text=[%s]\n",slrcvmsg.msgtext);

msgctl(imsgid,ipc_rmid,0); //刪除訊息佇列

exit(0);

}

#include

#include

#include

#include

#include

#define msgkey 1024

struct msgstru

;main()

} slqmsg.msgtype = 100;

strcpy(slqmsg.msgtext, str);

ilrc = msgsnd(imsgid,&slqmsg,sizeof(struct msgstru),ipc_nowait); //傳送訊息佇列

if ( ilrc < 0 )

exit(0);

}

本程式例項介紹linux環境下利用訊息佇列進行程序間通訊,主要介紹ftok函式,msgget建立訊息佇列和獲取已存在訊息佇列,

msgctl獲取訊息佇列結構資訊,msgsnd傳送訊息到訊息佇列,msgrcv從訊息佇列中獲取訊息。

本程式由兩個.c檔案組成,msgqueuerecv.c和msgqueuesend.c,msgqueuerecv.c裡面建立訊息佇列並阻塞式從訊息佇列接收訊息,

最後刪除訊息佇列(訊息佇列在核心建立);msgqueuesend.c獲取以建立的訊息佇列,向訊息佇列傳送訊息。

請參考《unix環境高階程式設計》輔助學習。

#include

#include

#include

#include

#include

#include

#define buff_len 1024

#define ret_error 1

#define ret_ok 0

int main()

stmsgrecv;

int iret;

int imsgid; /* msg queue id */

int iflag = ipc_creat | ipc_excl | 0666; /* msg queue creating flag */

/* build key using ftok function */

kid = ftok(pcpathname, iprojectid);

if ( kid == -1 )

/* create msg queue */

imsgid = msgget(kid, iflag);

if ( imsgid == -1 )

/* recv msg from msg queue */

iret = msgrcv(imsgid, &stmsgrecv, buff_len, 1, 0);

if ( iret == -1 )

else

msgctl(imsgid, ipc_rmid, &stmsginfo); /* delete msg queue from kernel */

return ret_ok;

}

msgqueuesend.c

#include

#include

#include

#include

#include

#include

#define buff_len 1024

#define ret_error 1

#define ret_ok 0

int main()

stmsgsend;

int iret;

int imsgid; /* msg queue id */

int iflag = 0666; /* msg queue creating flag */

/* build key using ftok function */

kid = ftok(pcpathname, iprojectid);

if ( kid == -1 )

/* get existing msg queue */

imsgid = msgget(kid, iflag);

if ( imsgid == -1 )

/* send msg to msg queue */

stmsgsend.lmsgtype = 1;

strcpy(stmsgsend.acmsgsendbuff, "hello,world");

iret = msgsnd(imsgid, &stmsgsend, strlen("hello,world")+1, ipc_nowait);

if ( iret == -1 )

return ret_ok;

}

c 語言程式設計之關機

學習了這麼長的c語言,天天敲 也許會有點枯燥 今天學習一下用一段簡單的 惡搞別人 system shutdown s t 50 對,它就是今天 主角。別小看它 它可以讓別人電腦關機。如下 include include includeint main 只要你執行編譯這段 然後執行就會關機啦!當然我們...

C語言程式設計之陣列。

複習 第五章主要是講了迴圈的應用和跟if的巢狀,讓所編寫的程式達到要求。三種迴圈語句 while 新隊括號中的語句進行判斷,後對大括號內的成序進行迴圈。for,也是先判斷後進行執行,可以跟whille無條件等價。do while,先進行迴圈再進行判斷,且while後必須加引號代表程式結束。第六章 利...

C語言程式設計之簡介

c語言作為一種通用的高階語言,最初是由丹尼斯 里奇在貝爾實驗室為開發 unix 作業系統而設計的。c 語言最開始是於 1972 年在 dec pdp 11 計算機上被首次實現。在 1978 年,布萊恩 柯林漢 brian kernighan 和丹尼斯 里奇 dennis ritchie 製作了 c ...