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