`
weiyuhu
  • 浏览: 235885 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

linux进程通信(二)--消息队列

阅读更多
C代码

   1. /*msgserver.c*/ 
   2.  
   3. #include <stdlib.h> 
   4. #include <string.h> 
   5. #include <errno.h> 
   6. #include <sys/types.h> 
   7. #include <sys/ipc.h> 
   8. #include <sys/msg.h> 
   9. #include <sys/stat.h> 
  10.  
  11. #define   MSG_FILE "msgserver.c"  
  12. #define   BUFFER 255  
  13. #define   PERM S_IRUSR|S_IWUSR  
  14. /* 服务端创建的消息队列最后没有删除,我们要使用ipcrm命令来删除的 */ 
  15. /* ipcrm -q <msqid> */ 
  16.  
  17. struct msgtype  
  18. {  
  19.     long mtype;  
  20.     char buffer[BUFFER+1];  
  21. };  
  22.  
  23. int main()  
  24. {  
  25.     struct msgtype msg;  
  26.     key_t key;  
  27.     int msgid;  
  28.      
  29.     if((key=ftok(MSG_FILE,'a'))==-1)  
  30.     {  
  31.         fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));  
  32.         exit(1);  
  33.     }  
  34.  
  35.     if((msgid=msgget(key, PERM|IPC_CREAT|IPC_EXCL))==-1)  
  36.     { 
  37.         fprintf(stderr, "Creat Message Error:%s\n", strerror(errno));  
  38.         exit(1); 
  39.     }  
  40.     printf("msqid = %d\n", msgid); 
  41.     while(1) 
  42.     {  
  43.         msgrcv(msgid, &msg, sizeof(struct msgtype), 1, 0);  
  44.         fprintf(stderr,"Server Receive:%s\n", msg.buffer);  
  45.         msg.mtype = 2;  
  46.         msgsnd(msgid, &msg, sizeof(struct msgtype), 0);  
  47.     }  
  48.     exit(0);  
  49. }    
   1. /* msgclient.c */ 
   2.  
   3. #include <stdio.h> 
   4. #include <stdlib.h> 
   5. #include <string.h> 
   6. #include <errno.h> 
   7. #include <sys/types.h> 
   8. #include <sys/ipc.h> 
   9. #include <sys/msg.h> 
  10. #include <sys/stat.h> 
  11.  
  12. #define   MSG_FILE "msgserver.c"  
  13. #define   BUFFER 255  
  14. #define   PERM S_IRUSR|S_IWUSR  
  15.  
  16. struct msgtype {  
  17.     long mtype;  
  18.     char buffer[BUFFER+1];  
  19. };  
  20.  
  21. int main(int argc, char **argv)  
  22. {  
  23.     struct msgtype msg;  
  24.     key_t key;  
  25.     int msgid;  
  26.      
  27.     if(argc != 2)  
  28.     {  
  29.         fprintf(stderr,"Usage:%s string\n", argv[0]);  
  30.         exit(1);  
  31.     }  
  32.      
  33.     if((key=ftok(MSG_FILE,'a'))==-1)  
  34.     {  
  35.         fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));  
  36.         exit(1);  
  37.     }  
  38.      
  39.     if((msgid=msgget(key, PERM))==-1)  
  40.     {  
  41.         fprintf(stderr,"Creat Message  Error:%s\n", strerror(errno));  
  42.         exit(1);  
  43.     }  
  44.      
  45.     msg.mtype = 1;  
  46.     strncpy(msg.buffer, argv[1], BUFFER);  
  47.     msgsnd(msgid, &msg, sizeof(struct msgtype), 0);   
  48.     memset(&msg, '\0', sizeof(struct msgtype));  
  49.     msgrcv(msgid, &msg, sizeof(struct msgtype), 2, 0);  
  50.     fprintf(stderr, "Client receive:%s\n", msg.buffer);  
  51.     exit(0); 
  52. }    
分享到:
评论

相关推荐

    linux下进程间通信--消息队列

    标题"Linux下进程间通信--消息队列"指出了我们讨论的核心——如何在Linux环境中利用消息队列进行进程间的通信。下面我们将深入探讨消息队列的概念、工作原理、使用方法以及提供的优点。 1. **消息队列概念**: ...

    Linux进程间通信--Linux进程间通信

    Linux 操作系统提供了多种进程间通信机制,包括管道、信号、消息队列、共享内存和套接口等。 Linux 进程间通信的重要性: 在 Linux 操作系统中,进程间通信是非常重要的,因为它允许不同的进程共享数据和信息,...

    Linux进程间通信-消息队列实例.pdf

    【Linux进程间通信-消息队列实例】 在操作系统中,进程间通信(Inter-Process Communication, IPC)是多个进程共享数据、协调工作的重要机制。在Linux系统中,提供了多种进程间通信方式,如管道、信号量、共享内存...

    linux 进程通信-消息队列

    ### Linux 进程通信——消息队列详解 随着信息技术的发展,特别是九十年代以来,越来越多的数据处理系统采用了开放系统的架构,比如客户机/服务器模式。在这种模式下,客户端发起服务请求,服务器端响应并处理请求...

    linux进程间通信--IPC

    ### Linux进程间通信(IPC) 进程间通信(InterProcess Communication,简称IPC)是操作系统中一个重要的概念,指在计算机系统中不同的进程之间进行数据交换或通信的方法。在Linux环境下,进程间通信支持多种机制,...

    linux系统编程--进程间通信--管道

    常用的进程间通信方式有多种,包括无名管道、有名管道、信号、System V IPC 对象共享内存、消息队列和信号灯、BSD 套接字等。 本文主要介绍无名管道(pipe)的概念和使用方法。无名管道是一种半双工的通信方式,...

    Linux进程间通信-信号量通信进程互斥实例.pdf

    【Linux进程间通信】在操作系统中,进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据的重要机制。Linux提供了多种IPC方式,包括管道、消息队列、共享内存、信号量等。本实例主要关注的是...

    linux消息队列进程间通信

    而《Linux环境进程间通信(一)_管道及有名管.doc》讨论了无名管道和命名管道,它们适合简单的父子进程通信,但不支持进程组间的通信,且数据是线性流,无顺序保证。 《Linux环境进程间通信(三):消息队列.doc》详细...

    linux使用消息队列实现进程间双向通信

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程共享数据或交换信息的一种机制。本文将深入探讨如何利用消息队列这一IPC机制实现进程间的双向通信。消息队列允许进程异步地发送和接收...

    linux两不同进程用消息队列通信

    本文将深入探讨如何使用消息队列在两个不同的Linux进程中进行通信,基于提供的文件`msg_rcv.c`和`msg_send.c`,我们可以理解为接收端和发送端的实现。 ### 1. 消息队列的概念 消息队列是一种内核级的数据结构,它...

    利用消息队列实现进程间通信

    在IT行业中,进程间通信...总之,消息队列是Linux进程间通信的一种有效手段,它提供了灵活的数据交换和非同步通信的能力。通过学习和实践如何使用C语言中的消息队列API,开发者可以创建更复杂、更健壮的多进程应用。

    Linux进程间通信之消息队列

    本教程将深入探讨Linux进程间通信中的消息队列,并通过一个基础模型来阐述其工作原理。 消息队列是一种异步通信方法,允许进程发送和接收特定长度的消息,这些消息会被存储在内核维护的队列中,直到被接收方读取。...

    操作系统实验报告(LINUX进程间通信)

    操作系统实验报告(LINUX进程间通信)是操作系统课程的一部分,涵盖了Linux进程间通信的原理和应用,包括消息队列、C/S结构等内容。下面将对这些知识点进行详细的解释。 一、消息队列 消息队列是Linux进程间通信的...

    linux-fusion-1.1.tar.gz_fusion_linux fusion_linux 进程 通信_linux-fu

    描述中提到“linux进程间高级通信的一个模块”,这暗示了Linux Fusion可能是一个专注于进程间通信(IPC,Inter-Process Communication)的库或框架。在Linux系统中,进程间通信是不同进程之间交换数据的重要机制,...

    Linux--MSMQ-.rar_MSMQ Linux 平台_dsp消息队列_linux 平台_linux 消息队列_消息队列

    在Linux中,消息队列是Unix/Linux操作系统提供的五种进程间通信(IPC,Inter-Process Communication)机制之一,其他四种包括管道、共享内存、信号量和套接字。消息队列允许进程向队列中写入消息,并由其他进程按照...

    嵌入式Linux高级编程--04posix_进程间通信.ppt

    Linux进程间通信发展历程包括早期UNIX进程间通信、基于System V进程间通信、基于Socket进程间通信和POSIX进程间通信。 目前Linux使用的进程间通信方式包括管道、消息队列、共享内存、信号量和信号等。 管道通信是...

    Linux下C语言编程--进程通信、消息管理

    本文将详细介绍Linux环境下C语言编程中的几种进程通信方法,包括POSIX无名信号量、System V信号量、System V消息队列以及System V共享内存。 #### 1. POSIX无名信号量 ##### 理论基础 信号量是一种用于控制多个...

    linux_process_communication.rar_linux 进程通信_消息队列 _进程通信

    本资源主要探讨了三种主要的进程通信方式:信号量(Semaphores)、管道(Pipes)以及消息队列(Message Queues)。以下是对这些概念的详细阐述: 1. **信号量(Semaphores)**: 信号量是一种同步机制,用于控制对...

    Linux进程间通信-命名管道实例.pdf

    在给定的文件“Linux进程间通信-命名管道实例.pdf”中,我们可以通过两个示例程序来理解命名管道的工作原理。 首先,我们来看写操作程序。这个程序主要负责向命名管道写入数据。在程序中,定义了一个常量`FIFO_...

Global site tag (gtag.js) - Google Analytics