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

进程间通信的例子-消息队列

阅读更多
root@ubuntu:~/test/SourceCode/ch14# cat msg1.c 
/* Here's the receiver program. */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

#include <sys/msg.h>


struct my_msg_st {
    long int my_msg_type;
    char some_text[BUFSIZ];
};

int main()
{
    int running = 1;
    int msgid;
    struct my_msg_st some_data;
    long int msg_to_receive = 0;

/* First, we set up the message queue. */

    msgid = msgget((key_t)1234, 0666 | IPC_CREAT);

    if (msgid == -1) {
        fprintf(stderr, "msgget failed with error: %d\n", errno);
        exit(EXIT_FAILURE);
    }

/* Then the messages are retrieved from the queue, until an end message is encountered.
 Lastly, the message queue is deleted. */

    while(running) {
        if (msgrcv(msgid, (void *)&some_data, BUFSIZ,
                   msg_to_receive, 0) == -1) {
            fprintf(stderr, "msgrcv failed with error: %d\n", errno);
            exit(EXIT_FAILURE);
        }
        printf("You wrote: %s", some_data.some_text);
        if (strncmp(some_data.some_text, "end", 3) == 0) {
            running = 0;
        }
    }

    if (msgctl(msgid, IPC_RMID, 0) == -1) {
        fprintf(stderr, "msgctl(IPC_RMID) failed\n");
        exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS);
}
root@ubuntu:~/test/SourceCode/ch14# 

root@ubuntu:~/test/SourceCode/ch14# cat msg2.c  
/* The sender program is very similar to msg1.c. In the main set up, delete the
 msg_to_receive declaration and replace it with buffer[BUFSIZ], remove the message
 queue delete and make the following changes to the running loop.
 We now have a call to msgsnd to send the entered text to the queue. */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

#include <sys/msg.h>

#define MAX_TEXT 512

struct my_msg_st {
    long int my_msg_type;
    char some_text[MAX_TEXT];
};

int main()
{
    int running = 1;
    struct my_msg_st some_data;
    int msgid;
    char buffer[BUFSIZ];

    msgid = msgget((key_t)1234, 0666 | IPC_CREAT);

    if (msgid == -1) {
        fprintf(stderr, "msgget failed with error: %d\n", errno);
        exit(EXIT_FAILURE);
    }

    while(running) {
        printf("Enter some text: ");
        fgets(buffer, BUFSIZ, stdin);
        some_data.my_msg_type = 1;
        strcpy(some_data.some_text, buffer);

        if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1) {
            fprintf(stderr, "msgsnd failed\n");
            exit(EXIT_FAILURE);
        }
        if (strncmp(buffer, "end", 3) == 0) {
            running = 0;
        }
    }

    exit(EXIT_SUCCESS);
}
root@ubuntu:~/test/SourceCode/ch14# 


分享到:
评论

相关推荐

    C#进程间通信-消息队列代码实例

    本实例以C#语言为基础,详细讲解如何利用消息队列进行进程间通信。 首先,我们需要理解消息队列的基本概念。消息队列是一种存储和转发机制,它将消息从一个进程发送到另一个进程,而无需两者同时在线。消息队列的...

    进程与消息队列进程与消息队列简单例子

    进程与消息队列是操作系统中两种基本的进程间通信方式。进程是指计算机系统中正在运行的程序实体,而消息队列则是一种特殊的数据结构,用于在进程之间传递数据。 进程 在操作系统中,进程是指计算机系统中正在运行...

    进程间通信例子

    这个“进程间通信例子”可能是针对Windows Forms(WinForm)应用程序提供的一种实践示例,展示了如何在不同的进程中发送和接收信息。 1. **管道**:管道是一种半双工的通信方式,允许数据在两个进程间单向流动。...

    Liunx嵌入式系统进程间通信实例(二)—消息队列

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是...通过对`ivos-service-asm-api.c`、`AudioModeControl.c`等源代码的学习,我们可以更深入地理解如何在实际项目中应用消息队列进行进程间通信。

    Windows Service 通信- 消息队列

    在Windows操作系统环境中,服务是一种...通过消息队列,服务间通信变得更加灵活,降低了系统的耦合度,同时提高了整体的健壮性和可靠性。在开发过程中,了解并熟练运用这些技术,对于提升系统的质量和性能至关重要。

    UNIX网络编程卷2进程间通信--部分源代码

    进程间通信是操作系统中多进程协作的基础,它包括了管道、信号量、共享内存、消息队列、套接字等多种机制。这些机制允许不同进程之间交换数据,实现同步和协调。在这些源代码中,我们可以看到这些通信方式的实际...

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

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

    linux c 进程间通信 消息队列

    本教程将深入探讨Linux C语言中如何利用消息队列进行进程间通信,并提供亲测可用的代码示例。 首先,理解消息队列的基本概念。消息队列是一种特殊的文件系统对象,它允许一个进程发送消息到另一个进程,即使接收...

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

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

    进程与消息队列例子简单容易

    2. **消息队列**:消息队列是一种用于进程间通信(IPC)的方式,允许不同进程之间通过发送和接收消息来传递信息。消息队列提供了一种灵活的方式来组织和传递数据,特别是在多个进程需要相互通信的情况下非常有用。 ...

    Linux进程间通信课件代码.rar

    2. 7-5.c、7-10.c 和 7-7.c 同样可能代表不同章节或话题下的代码示例,这些例子可能逐步引导学习者了解进程间通信的不同层面,如信号量、管道、消息队列等。 3. 7-12write.c 和 7-12read.c 可能涉及到特定的进程间...

    基于STM32单片机开发板设计的例程源码之--LED闪烁-ucos-消息队列.rar

    在嵌入式系统中,消息队列是一种有效的进程间通信(IPC)机制。在本例中,可能有一个任务负责处理外部事件,当接收到特定消息时,它会将该消息放入消息队列。另一个任务,即LED闪烁任务,会从队列中取出消息并根据...

    C#进程间通信-共享内存代码实例

    在C#中,实现进程间通信有多种方法,如管道、套接字、消息队列等,而共享内存是其中一种高效且直接的方式。本篇文章将深入探讨C#中的共享内存实现,并通过一个具体的代码实例来阐述其工作原理。 共享内存是一种让多...

    delphi进程间通讯例子

    总的来说,这个Delphi例子旨在演示如何使用自定义消息和共享内存进行进程间通信,开发者可以从源代码中学习如何创建和管理这些通信机制,理解Delphi中IPC的实现细节。这不仅有助于深入理解Delphi编程,还能为解决多...

    基于网络编程中的消息队列

    消息队列是网络编程中的一种进程间通信(IPC,Inter-Process Communication)机制,它允许不同进程之间交换信息。在上述代码中,我们看到两个C程序:msgLucy.c 和 msgPeter.c,它们分别代表两个不同的进程,通过消息...

    Linux进程间通信的例子

    资源中包含了Linux进程间通信的例子,同时有源文件和可执行文件。 源码主要包含了Linux下IPC机制的本地进程通信方式,包含了IPC共享内存,IPC信号量,IPC消息队列的实现,以及Linux下判断进程退出原因的示例程序。

    Linux进程间通信-信号通信信号发送实例.pdf

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程间协同工作、交换数据的关键机制。本文将重点讨论其中的一种通信方式——信号通信,并通过具体的信号发送实例来解析其工作原理。 ...

    Linux进程间通信-信号通信定时信号实例.pdf

    在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)是多个进程间相互协作、交换数据的关键机制。本文将详细讲解一种常见的IPC方式——信号(Signal)通信,特别是其中的定时信号(Timed Signal)...

    深刻理解进程间通信

    在Linux环境下,进程间通信机制主要包括管道、信号、消息队列、信号灯、共享内存以及套接字等。这些通信手段为进程之间的协作提供了基础,是构建复杂多进程应用的基础。 #### 1. 管道 **1.1 管道概述及相关API应用...

    在SELinux中保护进程间通信

    本文通过一个具体的例子来展示如何利用SELinux策略和传统的Linux IPC机制来实现安全的进程间通信。假设我们有两个进程A和B,它们需要通过消息队列进行通信。为了确保安全性,我们可以采取以下步骤: 1. **定义安全...

Global site tag (gtag.js) - Google Analytics