成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

講解Unix 消息隊(duì)列應(yīng)用

系統(tǒng) 其他OS
文章中,我們會(huì)以舉例說(shuō)明一個(gè)Unix 消息隊(duì)列在 C/S 模式中的應(yīng)用來(lái)講解一下關(guān)于Unix 消息隊(duì)列的應(yīng)用知識(shí)。希望大家能夠提高自己的技術(shù)。

今天,我們來(lái)學(xué)習(xí)一下Unix 消息隊(duì)列的知識(shí),首先,我們下面舉例說(shuō)明一個(gè)Unix 消息隊(duì)列在 C/S 模式中的應(yīng)用。 C/S 的一個(gè)重要特性就是非對(duì)等性, 多個(gè)客戶機(jī)同時(shí)向一個(gè)服務(wù)器提出不同的請(qǐng)求 , 服務(wù)器接收并處理客戶機(jī)的請(qǐng)求后 , 將結(jié)果返回給相應(yīng)的客戶機(jī)。在這里 , 我們利用兩個(gè)Unix 消息隊(duì)列、一個(gè)服務(wù)進(jìn)程、若干客戶進(jìn)程來(lái)模擬客戶 / 服務(wù)應(yīng)用。

由各客戶進(jìn)程將請(qǐng)求信息寫入隊(duì)列 1( 鍵值 0x16), 消息類型定為 10; 服務(wù)進(jìn)程從隊(duì)列 1 中讀取類型為 10 的消息進(jìn)行處理 , 并將處理結(jié)果放入U(xiǎn)nix 消息隊(duì)列 2( 鍵值0x17), 將類型置為原客戶進(jìn)程號(hào) , 這樣每個(gè)客戶進(jìn)程可根據(jù)其中的消息類型即進(jìn)程號(hào)再?gòu)年?duì)列 2 中讀出屬于自己的結(jié)果 。

具體操作時(shí)先啟動(dòng)服務(wù)進(jìn)程 (server.c), 創(chuàng)建兩個(gè)Unix 消息隊(duì)列 , 鍵值分別為十六進(jìn)制 16和 17; 這時(shí)再啟動(dòng)若干客戶進(jìn)程 (client.c), 輸入一任意字符串 , 這時(shí)服務(wù)進(jìn)程則顯示客戶進(jìn)程號(hào)和原字符串 , 客戶進(jìn)程則回顯***個(gè)字符被改為 "_" 的處理后的字符串和消息類型( 自身進(jìn)程號(hào) ) 。如輸入字符 "q", 則刪除原Unix 消息隊(duì)列 , 同時(shí)退出。源程序清單附后 , 該程序在 UNIX3.2 、 4.2 環(huán)境下編譯調(diào)試通過(guò)。

這只是進(jìn)程通信在機(jī)器內(nèi)部的實(shí)現(xiàn) , 要實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)機(jī)器間的通信還要借助 UNIX 網(wǎng)際系統(tǒng)的套接字來(lái)實(shí)現(xiàn)。

源程序清單如下 :
 

  1. 服務(wù)進(jìn)程 :(server.c)   
  2. #include <stdio.h>   
  3. #include <sys/types.h>   
  4. #include <sys/ipc.h>   
  5. #include <sys/msg.h>   
  6. #define KEY16 (key_t)16   
  7. #define KEY17 (key_t)17   
  8. #include (ctype.h)   
  9. int i,msgid1,msgid2,val;   
  10. char *s   
  11. struct{   
  12. long mtype;   
  13. short stype;   
  14. char mtext[40];   
  15. }buf;   
  16. main()   
  17. {   
  18.  
  19. cr_q(); /* 創(chuàng)建消息隊(duì)列 */   
  20. /* 讀消息隊(duì)列 1, 消息隊(duì)列類型為 10, 等待客戶請(qǐng)求 */   
  21. while   (msgrcv(msgid1,&buf,42,(long)10, ~ IPC_NOWAIT)>=0)   
  22. {printf("\n text from client is:[%s]",buf.mtext);   
  23.  printf ("client pid is <%d> \n",buf.stype);   
  24.  process();/* 將處理結(jié)果寫入消息隊(duì)列 2*/   
  25. }   
  26. }   
  27. cr_q()   
  28. {  msgid1=msgget(KEY16,IPC_CREAT|0666);   
  29. if (msgid1<0) {perror("key16 msgget failed");exit(1);}   
  30. msgid2=msgget(KEY17,IPC_CREAT|0666);   
  31. if (msgid2<0) {perror("key17 msgget failed");exit(1);}   
  32. }   
  33. process()   
  34. {   
  35. bufbuf.mtype=buf.stype;/* 原客戶進(jìn)程號(hào) */   
  36. buf.mtext[0]= ‘ _ ’ ;   
  37. if(msgsnd(msgid2,&buf,42,IPC_NOWAIT)<0)   
  38. {perror("key17 msgsnd failed");exit(1);}   
  39. }   

 

  1. 客戶進(jìn)程 :(client.c)   
  2. #include <stdio.h>   
  3. #include <sys/types.h>   
  4. #include <sys/ipc.h>   
  5. #include <sys/msg.h>   
  6. define KEY16 (key_t)16   
  7. define KEY17 (key_t)17   
  8. include <ctype.h>   
  9. int msgid1,msgid2;   
  10. struct{   
  11. long mtype;   
  12. short stype;   
  13. char mtext[40];   
  14. }buf;   
  15. char s[41];   
  16. int clean()   
  17. main()   
  18. {   
  19. get_q();/* 取消隊(duì)列標(biāo)志符 */   
  20. while (1)   
  21. {   
  22. printf ("\n @ input mtext:");/* 輸入字符串 */   
  23. scanf("%s",s);   
  24. if ((strcmp(s,"q")==0)) break;   
  25. strcpy(buf.mtext,s);   
  26. buf.mtype=10; /* 消息類型置為 10*/   
  27. buf.stype=getpid();/* 客戶進(jìn)程號(hào) */   
  28. /* 寫消息隊(duì)列 1, 向服務(wù)進(jìn)程提出請(qǐng)求 */   
  29. if (msgsnd(msgid1,&buf,40, ~ IPC_NOWAIT)<0)   
  30. {perror("key16 msgsnd failed");exit(1);}   
  31. /* 讀消息隊(duì)列 2, 類型為自身進(jìn)程號(hào) , 接收處理結(jié)果 */   
  32. if (msgrcv(msgid2,&buf,42,getpid(), ~ IPC_NOWAIT)<0)   
  33.  {perror("key17 msgrcv failed");exit(1);}   
  34. printf("\n the answer from server is:[%s]",buf.mtext);   
  35.  printf("mtype is:[%d]",buf.mtype);   
  36.  }   
  37. clean();/* 刪除消息隊(duì)列 */   
  38. }   
  39. clean()   
  40. {   
  41. if(msgct1(msgid1,IPC_RMID,(struct msgid*)NULL)<0)   
  42. {perror("key16 msgct1 failed");exit(1);}   
  43. if(msgct1(msgid2,IPC_RMID,(struct msgid*)NULL<0)   
  44. {perror("key17 msgct1 failed");exit(1);}   
  45. printf("msg queue removed\n");   
  46. exit(0);   
  47. }   
  48. get_q()   
  49. {   
  50. msgid1=msgget(KEY16,0);   
  51. if (msgid1<0) {perror("key16 msgget failed");exit(1);}   
  52. msgid2=msgget(KEY17,0);if (msgid2<0) {perror("key17 msgget failed");exit(1);}   
  53. }  

關(guān)于Unix 消息隊(duì)列的應(yīng)用,我們今天就講解到這里啦,希望大家能夠好好的學(xué)習(xí),我們會(huì)帶來(lái)更多的Unix 消息隊(duì)列應(yīng)用的知識(shí)。

【編輯推薦】

  1. Linux多線程同步之消息隊(duì)列
  2. 詳解Unix消息隊(duì)列知識(shí)
  3. VB.NET消息隊(duì)列相關(guān)內(nèi)容詳細(xì)介紹
  4. WCF消息隊(duì)列系列介紹
  5. 說(shuō)明WCF消息隊(duì)列具體問(wèn)題
責(zé)任編輯:小霞
相關(guān)推薦

2010-04-21 12:39:48

Unix 消息隊(duì)列

2010-04-21 14:49:13

Unix消息隊(duì)列

2010-04-13 17:00:43

Unix消息隊(duì)列

2010-04-21 14:39:59

Unix消息隊(duì)列

2010-04-21 15:20:31

Unix線程

2010-05-04 11:59:39

Unix系統(tǒng)

2010-05-05 17:30:04

Unix MBB

2010-05-05 13:13:55

Unix內(nèi)核

2010-04-30 13:27:26

Unix cronta

2010-05-04 12:25:28

Unix鏈接

2010-05-05 13:45:21

Unix Telnet

2010-05-05 16:05:36

Unix cfengi

2010-05-05 17:41:03

IBM Unix

2010-05-04 09:22:10

Unix文件

2010-05-05 10:19:51

Unix系統(tǒng)

2010-04-30 13:38:51

Unix at命令

2018-04-26 15:18:49

RTOS應(yīng)用MPU

2010-04-29 10:15:01

Unix系統(tǒng)

2010-04-30 16:08:20

Unix內(nèi)核

2010-05-04 16:33:39

Unix系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产乱码久久久久久 | 在线免费观看黄网 | 国产成人区 | 人人鲁人人莫人人爱精品 | 日日摸日日添日日躁av | 草草网| 日本黄色的视频 | 天天躁日日躁aaaa视频 | 中文字幕三区 | 欧美成人精品一区二区男人看 | 91免费在线 | 日本欧美国产在线观看 | 精品乱人伦一区二区三区 | 久久久亚洲成人 | 午夜av一区二区 | 欧美一区二区三区视频在线 | 日韩一级在线 | 奇米av| 99精品免费 | 国产福利91精品一区二区三区 | 视频国产一区 | 亚洲精品中文字幕在线观看 | 日韩成人专区 | 国产精品1区2区3区 欧美 中文字幕 | 毛片一区二区三区 | 中文在线一区二区 | 国产成人艳妇aa视频在线 | 久久中文字幕一区 | 精品视频在线播放 | 国产午夜久久久 | 无人区国产成人久久三区 | 性色综合| 精品国产乱码久久久久久88av | 久久久久久久久蜜桃 | 亚洲午夜视频 | 欧美一区二区三区在线 | 一区二区av | 成人免费网视频 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 91性高湖久久久久久久久_久久99 |