gpt4 book ai didi

LINUX msgget 和队列

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:44 25 4
gpt4 key购买 nike

我有简单的代码:

  1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <errno.h>
4 #include <string.h>
5 #include <sys/types.h>
6 #include <sys/ipc.h>
7 #include <sys/msg.h>
8
9 struct my_msgbuf {
10 long mtype;
11 char mtext[200];
12 };
13
14 int main(void){
15 struct my_msgbuf buf;
16 int msqid;
17 key_t key;
18
19 if((key = ftok("main.c", 'B')) == -1) {
20 perror("ftok"); exit(1);
21 }
22
23 if( (msqid = msgget(key, 0644 | IPC_CREAT)) == -1){
24 perror("msgget");
25 exit(1);
26 }
27
28 printf("Enter lines of text, ^D to quit:\n");
29 buf.mtype = 1;
30 while(fgets(buf.mtext, sizeof(buf.mtext), stdin) != NULL){
31 int len = strlen(buf.mtext);
32 if(buf.mtext[len-1] == '\n') buf.mtext[len-1] = '\0';
33 if(msgsnd(msqid, &buf, len+1,0) == -1){
34 perror("msgsnd");
35 }
36
37 }
38
39 if(msgctl(msqid, IPC_RMID, NULL) == -1){
40 perror("msgctl");
41 exit(1);
42 }
43
44 return 0;
45 }

下一步我要做的事情:

gcc -o main main.c

下一步运行:

./main

和结果:

msgget:设备上没有剩余空间

如何修复它?我正在大学服务器上工作(通过putty连接),它可以回答这个问题吗?

最佳答案

根据手册页,ENOSPC 的错误是:

A message queue has to be created but the system limit for the maximum number of message queues (MSGMNI) would be exceeded.

如果它是服务器,则意味着其他用户创建的消息队列过多(如果这是一些家庭作业并且其他学生也在该服务器上工作,则不太可能)。您可以使用 cat/proc/sys/kernel/msgmni 查看 MSGMNI 值。但是,只有管理员可以更改它。

关于LINUX msgget 和队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23094823/

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