消息接收程序仅打印其他每条消息

安德尔

我已经实现了http://beej.us/guide/bgipc/output/html/multipage/mq.html 7.6部分中的两个程序

我已经对其进行了扩展,以便有两个接收程序,接收程序是由消息类型决定的。

问题出现在接收程序B和C中。它们应该每次都打印出输入到程序A中的消息,但是它们仅每隔一段时间打印一次消息。

这是发送消息的地方,它读取前6个字符,如果是紧急字符,则设置消息类型。

buf.mtype = 2;

while(fgets(buf.mtext, sizeof buf.mtext, stdin) != NULL) {
        int len = strlen(buf.mtext);

        strncpy(typeTest, buf.mtext, 6);

        if(strncmp(typeTest, "URGENT", 6) == 0){
            buf.mtype = 1;
        }       

        printf("This is the message %s \n", buf.mtext);

        /* ditch newline at end, if it exists */
        if (buf.mtext[len-1] == '\n') buf.mtext[len-1] = '\0';

        if (msgsnd(msqid, &buf, len+1, 0) == -1) /* +1 for '\0' */
            perror("msgsnd");
    }

这是接收消息的地方,然后if语句检查类型,然后打印出来。

for(;;) { /* Spock never quits! */
        if (msgrcv(msqid, &buf, sizeof buf.mtext, 0, 0) == -1) {
            perror("msgrcv");
            exit(1);
        }

        if(buf.mtype == 2){
            printf("spock: \"%s\"\n", buf.mtext);
        }
    }

谁能阐明为什么它只打印出所有其他消息?

谢谢。

保罗·奥吉维

buf.mtype如果输入不是“ URGENT ...”,则必须在程序A中将其设置为2。每次都必须在循环中执行此操作。

while(fgets(buf.mtext, sizeof buf.mtext, stdin) != NULL) {
    int len = strlen(buf.mtext);

    strncpy(typeTest, buf.mtext, 6);

    if(strncmp(typeTest, "URGENT", 6) == 0){
        buf.mtype = 1;
    }       
    else buf.mtype= 2;    // always set the default

    printf("This is the message %s \n", buf.mtext);

    /* ditch newline at end, if it exists */
    if (buf.mtext[len-1] == '\n') buf.mtext[len-1] = '\0';

    if (msgsnd(msqid, &buf, len+1, 0) == -1) /* +1 for '\0' */
        perror("msgsnd");
}

在程序B和C中,必须将msgtyp每个程序设置为1或2才能从队列中获取正确的消息,例如:

int main(argc, argv)
{
    int msgtype;
    if (*argv[1]=='A')
        msgtype= 1;
    else if (*argv[1]=='B')
        msgtype= 2;
    else
        msgtype= 0;
    ...
    for(;;) { /* Spock never quits! */
        if (msgrcv(msqid, &buf, sizeof buf.mtext, msgtype, 0) == -1) {
            perror("msgrcv");
            exit(1);
        }

        if(buf.mtype == msgtype){
            printf("spock: \"%s\"\n", buf.mtext);
        }
    }
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

接收其他窗口的消息

来自分类Dev

Websocket:从其他页面接收消息

来自分类Dev

MSMQ消息多播:无法在其他计算机上接收消息

来自分类Dev

带有esp32的AWS iot接收来自某些主题的消息,但不接收其他主题的消息吗?

来自分类Dev

Ejabberd仅打印“消息”包

来自分类Dev

其他的简单消息错误

来自分类Dev

Flutter MQTT仅接收部分消息

来自分类Dev

从for循环仅打印一次消息

来自分类Dev

jQuery数组对象仅打印消息键

来自分类Dev

哪种聊天模式更好:在输入消息时或服务器接收消息后打印消息?

来自分类Dev

其他Chrome扩展程序可以读取由我的扩展程序编写的日志消息吗?

来自分类Dev

设置“重要”消息红色,其他白色

来自分类Dev

发送消息到其他进程

来自分类Dev

发送消息到其他进程

来自分类常见问题

需要Firebase每天仅返回一次日期,而不是在每条消息之后返回日期

来自分类Dev

组装程序打印消息三遍

来自分类Dev

在所有其他窗口顶部的“任务计划程序”中显示消息框

来自分类Dev

在其他应用程序中选择消息时弹出窗口-Android

来自分类Dev

SignalR:如何将消息广播到应用程序的“其他”页面

来自分类Dev

将“不幸的是,应用程序已停止消息”更改为其他一些文本

来自分类Dev

循环仅打印其他语句

来自分类Dev

仅消息窗口可以接收WM_QUERYENDSESSION吗?

来自分类Dev

服务总线会话ReceiveBatchAsync仅接收1条消息

来自分类Dev

HDInsight Storm事件中心喷口仅接收1024条消息

来自分类Dev

FCM:设备仅接收多个通知消息之一

来自分类Dev

仅接收来自特定DDS主题实例的消息?

来自分类Dev

为什么我的程序仅打印出其他所有字符?C

来自分类Dev

主板根本不打印POST消息,但其他情况下都可以正常工作-这正常吗?

来自分类Dev

如何在屏幕上打印一条消息,然后重定向到其他页面 php/js

Related 相关文章

  1. 1

    接收其他窗口的消息

  2. 2

    Websocket:从其他页面接收消息

  3. 3

    MSMQ消息多播:无法在其他计算机上接收消息

  4. 4

    带有esp32的AWS iot接收来自某些主题的消息,但不接收其他主题的消息吗?

  5. 5

    Ejabberd仅打印“消息”包

  6. 6

    其他的简单消息错误

  7. 7

    Flutter MQTT仅接收部分消息

  8. 8

    从for循环仅打印一次消息

  9. 9

    jQuery数组对象仅打印消息键

  10. 10

    哪种聊天模式更好:在输入消息时或服务器接收消息后打印消息?

  11. 11

    其他Chrome扩展程序可以读取由我的扩展程序编写的日志消息吗?

  12. 12

    设置“重要”消息红色,其他白色

  13. 13

    发送消息到其他进程

  14. 14

    发送消息到其他进程

  15. 15

    需要Firebase每天仅返回一次日期,而不是在每条消息之后返回日期

  16. 16

    组装程序打印消息三遍

  17. 17

    在所有其他窗口顶部的“任务计划程序”中显示消息框

  18. 18

    在其他应用程序中选择消息时弹出窗口-Android

  19. 19

    SignalR:如何将消息广播到应用程序的“其他”页面

  20. 20

    将“不幸的是,应用程序已停止消息”更改为其他一些文本

  21. 21

    循环仅打印其他语句

  22. 22

    仅消息窗口可以接收WM_QUERYENDSESSION吗?

  23. 23

    服务总线会话ReceiveBatchAsync仅接收1条消息

  24. 24

    HDInsight Storm事件中心喷口仅接收1024条消息

  25. 25

    FCM:设备仅接收多个通知消息之一

  26. 26

    仅接收来自特定DDS主题实例的消息?

  27. 27

    为什么我的程序仅打印出其他所有字符?C

  28. 28

    主板根本不打印POST消息,但其他情况下都可以正常工作-这正常吗?

  29. 29

    如何在屏幕上打印一条消息,然后重定向到其他页面 php/js

热门标签

归档