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环境中利用消息队列进行进程间的通信。下面我们将深入探讨消息队列的概念、工作原理、使用方法以及提供的优点。 1. **消息队列概念**: ...
Linux 操作系统提供了多种进程间通信机制,包括管道、信号、消息队列、共享内存和套接口等。 Linux 进程间通信的重要性: 在 Linux 操作系统中,进程间通信是非常重要的,因为它允许不同的进程共享数据和信息,...
【Linux进程间通信-消息队列实例】 在操作系统中,进程间通信(Inter-Process Communication, IPC)是多个进程共享数据、协调工作的重要机制。在Linux系统中,提供了多种进程间通信方式,如管道、信号量、共享内存...
### Linux 进程通信——消息队列详解 随着信息技术的发展,特别是九十年代以来,越来越多的数据处理系统采用了开放系统的架构,比如客户机/服务器模式。在这种模式下,客户端发起服务请求,服务器端响应并处理请求...
### Linux进程间通信(IPC) 进程间通信(InterProcess Communication,简称IPC)是操作系统中一个重要的概念,指在计算机系统中不同的进程之间进行数据交换或通信的方法。在Linux环境下,进程间通信支持多种机制,...
常用的进程间通信方式有多种,包括无名管道、有名管道、信号、System V IPC 对象共享内存、消息队列和信号灯、BSD 套接字等。 本文主要介绍无名管道(pipe)的概念和使用方法。无名管道是一种半双工的通信方式,...
【Linux进程间通信】在操作系统中,进程间通信(Inter-Process Communication, IPC)是不同进程之间交换数据的重要机制。Linux提供了多种IPC方式,包括管道、消息队列、共享内存、信号量等。本实例主要关注的是...
而《Linux环境进程间通信(一)_管道及有名管.doc》讨论了无名管道和命名管道,它们适合简单的父子进程通信,但不支持进程组间的通信,且数据是线性流,无顺序保证。 《Linux环境进程间通信(三):消息队列.doc》详细...
在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程共享数据或交换信息的一种机制。本文将深入探讨如何利用消息队列这一IPC机制实现进程间的双向通信。消息队列允许进程异步地发送和接收...
本文将深入探讨如何使用消息队列在两个不同的Linux进程中进行通信,基于提供的文件`msg_rcv.c`和`msg_send.c`,我们可以理解为接收端和发送端的实现。 ### 1. 消息队列的概念 消息队列是一种内核级的数据结构,它...
在IT行业中,进程间通信...总之,消息队列是Linux进程间通信的一种有效手段,它提供了灵活的数据交换和非同步通信的能力。通过学习和实践如何使用C语言中的消息队列API,开发者可以创建更复杂、更健壮的多进程应用。
本教程将深入探讨Linux进程间通信中的消息队列,并通过一个基础模型来阐述其工作原理。 消息队列是一种异步通信方法,允许进程发送和接收特定长度的消息,这些消息会被存储在内核维护的队列中,直到被接收方读取。...
操作系统实验报告(LINUX进程间通信)是操作系统课程的一部分,涵盖了Linux进程间通信的原理和应用,包括消息队列、C/S结构等内容。下面将对这些知识点进行详细的解释。 一、消息队列 消息队列是Linux进程间通信的...
描述中提到“linux进程间高级通信的一个模块”,这暗示了Linux Fusion可能是一个专注于进程间通信(IPC,Inter-Process Communication)的库或框架。在Linux系统中,进程间通信是不同进程之间交换数据的重要机制,...
在Linux中,消息队列是Unix/Linux操作系统提供的五种进程间通信(IPC,Inter-Process Communication)机制之一,其他四种包括管道、共享内存、信号量和套接字。消息队列允许进程向队列中写入消息,并由其他进程按照...
Linux进程间通信发展历程包括早期UNIX进程间通信、基于System V进程间通信、基于Socket进程间通信和POSIX进程间通信。 目前Linux使用的进程间通信方式包括管道、消息队列、共享内存、信号量和信号等。 管道通信是...
本文将详细介绍Linux环境下C语言编程中的几种进程通信方法,包括POSIX无名信号量、System V信号量、System V消息队列以及System V共享内存。 #### 1. POSIX无名信号量 ##### 理论基础 信号量是一种用于控制多个...
本资源主要探讨了三种主要的进程通信方式:信号量(Semaphores)、管道(Pipes)以及消息队列(Message Queues)。以下是对这些概念的详细阐述: 1. **信号量(Semaphores)**: 信号量是一种同步机制,用于控制对...
在给定的文件“Linux进程间通信-命名管道实例.pdf”中,我们可以通过两个示例程序来理解命名管道的工作原理。 首先,我们来看写操作程序。这个程序主要负责向命名管道写入数据。在程序中,定义了一个常量`FIFO_...