gpt4 book ai didi

c - msgrcv 的阻塞性质

转载 作者:行者123 更新时间:2023-11-30 19:26:26 30 4
gpt4 key购买 nike

我使用消息队列将消息从一个进程发送到另一个进程。接收消息的进程仅在完成对 msgrcv 函数的所有调用后才打印输出。我期望的是它会在收到消息时打印数据,但只有在收到所有消息后才会打印数据。

我尝试过更改权限。我用过 0666 | 0666|IPC_NOWAIT IPC_NOWAIT | IPC_NOWAIT | IPC_CREAT

server.c

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#include <string.h>

struct mesg_buffer {
long mtype;
char mtext[100];
};

int main(void){
struct mesg_buffer message;
int sq_msgid, uq_msgid;
int num_users = 0;
sq_msgid = msgget(ftok("server_queue",1), 0666 | IPC_CREAT);
uq_msgid = msgget(ftok("user_queue",1), 0666 | IPC_CREAT);
for(int i=0;i<2;i++){
printf("%ld",msgrcv(sq_msgid, &message, sizeof(message), 1, 0));
}
}

client.c

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <pthread.h>
#include <semaphore.h>
#include <signal.h>
#include <string.h>

struct mesg_buffer {
long mtype;
char mtext[100];
};

int main(void){
struct mesg_buffer message;
int sq_msgid, uq_msgid;
sq_msgid = msgget(ftok("server_queue",1), 0666 | IPC_CREAT);
strcpy(message.mtext, "join");
message.mtype = 1;
int r = msgsnd(sq_msgid, &message, sizeof(message), 0);
printf("%d", r);
}

最佳答案

当我在评论中得到回复时,每当我需要向控制台显示输出时, 我只需要使用 fflush(stdout)

关于c - msgrcv 的阻塞性质,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248780/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com