- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
this is my code and in the last part,msgrecv does not accept the messages from the queue accourding the correct preiority , eg: 10 is most important to accept then type=20 then type=30 ... that is my goal is to accept messages in this manner ... can anyone show me where is the problem? because the acceptance is accoures without priority .. Thanks.. that is the code
#include <sys/msg.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <string.h>
#include "fifo.h"
typedef struct mymsg {
long mtype;
char mtext[100];
int private;
}mymsg;
int main()
{
int msqid;
mymsg msg,buff;
msqid=msgget(6000,IPC_CREAT|0666);
if(msqid==-1){
perror("FAiled to create message queue\n");
}
else{
printf("Message queue id:%u\n",msqid);
}
//ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
int x=0 ;
while(1){
int privatefifo;
if(msgrcv(msqid,&buff,sizeof(msg)-sizeof(long),10,/*IPC_NOWAIT*/MSG_NOERROR | IPC_NOWAIT)>-1)
x=10;
else if(msgrcv(msqid,&buff,sizeof(msg)-sizeof(long),20,/*IPC_NOWAIT*/MSG_NOERROR | IPC_NOWAIT)>-1)
x=20;
else if(msgrcv(msqid,&buff,sizeof(msg)-sizeof(long),30,/*IPC_NOWAIT*/MSG_NOERROR | IPC_NOWAIT)>-1)
x=30;
printf("The message received is: %s , , from %d\n",buff.mtext,x);
strcpy(msg.mtext,"i replay you");
msg.mtype=buff.mtype;
if(msgsnd(buff.private,&msg,sizeof(msg)-sizeof(long),0)==-1){
perror("msgsnd failed:");
}
else{
printf("Message sent successfully\n");
}
}
}
最佳答案
我修复了它,只是我必须在 x 的值处设置一个条件,以确保 3 个条件之一满足或都不满足 ..
关于c - 询问 msgrcv ,不适用于根据优先级接受消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38557807/
我使用消息队列将消息从一个进程发送到另一个进程。接收消息的进程仅在完成对 msgrcv 函数的所有调用后才打印输出。我期望的是它会在收到消息时打印数据,但只有在收到所有消息后才会打印数据。 我尝试过更
我有两个程序通过 IPC 队列相互发送和接收消息。然而,有时 msgrcv 函数会得到一条空白消息,而不是接收通过队列实际发送的消息。我已经注释掉了一个我认为应该有效的修复程序,但我想在这里检查一下,
我当前正在尝试在主进程及其子进程之间发送消息。我正在使用消息传递来强制执行关键部分,但子进程中的消息接收功能失败,我不知道是否应该采用不同的方式发送消息。我的消息接收函数正在父进程中获取消息,因此我无
在我的项目中,协议(protocol)(不可更改)指定以下结构: typedef struct { long type; char username[USER_NAME_MAX_LENGTH]; in
this is my code and in the last part,msgrecv does not accept the messages from the queue accourding
所以我的 msgrcv() 函数调用效果很好,但它会在从其他进程接收到的内容中添加字符。 发送方进程发送hello,接收方进程接收hello@\n或hello\n@或hello@ ,因为它随机打印不同
我正在编写一个基本服务器程序,它必须从客户端接收两种类型的消息(第一个消息是类型 1,第二个消息是类型 2)。似乎它没有看到来自已正确发送的客户端的消息(msgsnd 不返回 -1)。我读到这可能是由
我正在开发一个程序,该程序应该像服务器一样运行,不断从消息队列中读取并处理收到的消息。 主循环看起来像这样: while (1) { /* Receive message */ if
我需要一些关于 msgrcv 的帮助...我需要能够接收这样的消息: while(1){ int status = msgrcv(qid, &msg, sizeof(msg.data), us
我构建了一个程序,允许我创建和删除消息队列以及发送和接收消息。 除了接收消息外,一切似乎都正常工作。当我收到结构时,我可以访问类型(我一直用它来表示“收件人”)并打印它,但是存储在结构的 msg 字段
我编写了两个程序,一个使用 msgsnd 发送消息,另一个使用 msgrcv 接收消息。我已经使用这些功能很长一段时间了,但我无法弄清楚接收文件时出现“检测到堆栈粉碎”错误。在该文件中,我尝试将文件的
现在,我正在尝试输出 buf.mtext 的内容,以便在继续我的程序之前确保采用正确的输入。一切似乎都运行良好,除了一件事; msgrcv()将垃圾字符放入缓冲区,接收进程输出垃圾字符。 这是我的发件
我在队列中有许多消息(它们是整数)我想要消费,我想使用整数 int consumed 来跟踪我消费了多少消息。 我首先使用 ds.msg_qnum > 0 检测队列是否有消息,其中 ds 是 stru
我有一个问题。 我有一个进程,假设它是一个客户端,还有一个叫做服务器的进程。客户端和服务器通过同一个队列相互通信。假设客户端向服务器发送一条消息(请求),因此服务器处理它并且应该将消息发送回客户端以确
我有两个不同的程序: 第一个,基本上是无限循环地在消息队列上调用 msgrcv 并在它收到任何东西时打印,在 C++ 中: //foo1.cpp #include #include #includ
我使用 IPC 队列在线程之间进行通信的代码有问题。我需要安全地处理 SIGINT - 当 SIGINT 在关闭之前出现时让程序完成所有事件线程。虽然,我在寻找解决方案时遇到了严重的问题,因为即使使用
#include #include #include #include #include #include #include #include #include struct msg
我正在为考试学习操作系统基础知识,但遇到了一个奇怪的问题。我目前正在研究发送/接收功能。假设我有 3 个主程序 Client,它们通过 msgsnd() 原语发送消息。结构如下: typedef st
我正在unix系统上用C编写代码。我创建了一个消息队列服务器。每次我收到新消息时,我都会 fork ,并且子进程会处理新客户端。服务器等待新的客户端。这是代码。 for (;;) { s
我有一个应用程序,它具有信号处理程序并创建了一个线程来处理消息队列。下面是信号处理程序, /*! \Register handle on SIGINT. */ signal(SIGINT,
我是一名优秀的程序员,十分优秀!