linux 有没有直接发送消息到队列的命令
答案:2 悬赏:10 手机版
解决时间 2021-03-06 04:03
- 提问者网友:两耳就是菩提
- 2021-03-05 18:13
linux 有没有直接发送消息到队列的命令
最佳答案
- 五星知识达人网友:一叶十三刺
- 2021-03-05 18:53
Linux采用消息队列的方式来实现消息传递。这种消息的发送方式是:发送方不必等待接收方检查它所收到的消息就可以继续工作下去,而接收方如果没有收到消息也不需等待。这种通信机制相对简单,但是应用程序使用起来就需要使用相对复杂的方式来应付了。新的消息总是放在队列的末尾,接收的时候并不总是从头来接收,可以从中间来接收。
消息队列是随内核持续的并和进程相关,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除。因此系统中记录消息队列的数据结构 (struct ipc_ids msg_ids)位于内核中,系统中的所有消息队列都可以在结构msg_ids中中找到访问入口。
IPC标识符:每一个I P C目标都有一个唯一的I P C标识符。这里所指的I P C目标是指一个单独的消息队列、一个信号量集或者一个共享的内存段。系统内核使用此标识符在系统内核中指明 I P C目标。
消息队列是随内核持续的并和进程相关,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除。因此系统中记录消息队列的数据结构 (struct ipc_ids msg_ids)位于内核中,系统中的所有消息队列都可以在结构msg_ids中中找到访问入口。
IPC标识符:每一个I P C目标都有一个唯一的I P C标识符。这里所指的I P C目标是指一个单独的消息队列、一个信号量集或者一个共享的内存段。系统内核使用此标识符在系统内核中指明 I P C目标。
全部回答
- 1楼网友:撞了怀
- 2021-03-05 19:13
我的作业,你凑合着用吧
//msgq_send.c
#include
#include
#include
#define maxsize 256
int main(int argc, char *argv[])
{
if (argc < 2)
{
printf("error args\n");
return -1;
}
int msgid;
msgid = msgget((key_t)2000, ipc_creat | 0644);
if (msgid == -1)
{
printf("msgget error\n");
return -1;
}
if (msgsnd(msgid, (void *)argv[1], maxsize, 0) == -1)
{
printf("msgsnd error\n");
return -1;
}
return 0;
}
//msgq_recv.c
#include
#include
#include
#define maxsize 256
int main(void)
{
int msgid;
int msgsize;
char buff[maxsize];
msgid = msgget((key_t)2000, ipc_creat | 0644);
if (msgid == -1)
{
printf("msgget error\n");
return -1;
}
msgsize = msgrcv(msgid, (void *)&buff, maxsize, 0, 0);
if (msgsize == -1)
{
printf("msgrcv error\n");
return -1;
}
printf("%s\n", buff);
return 0;
}
//makefile
target := msgq_send msgq_recv
cc := gcc
cflags := -wall -g
all: msgq_send msgq_recv
msgq_send: msgq_send.o
$(cc) $(cflags) $^ -o $@
msgq_recv: msgq_recv.o
$(cc) $(cflags) $^ -o $@
clean:
rm -fr *.o $(target)
.phony :clean
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯