gpt4 book ai didi

LinuxIPC : cannot remove msqid_ds

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

这似乎是一个奇怪的行为,但我需要保留我的 msqid_ds,否则我会收到 SIGABRT。代码很简单:

void printMessageQueueInfo(int queue_id){

// IPC_STAT: get descriptor structure
// IPC_SET: set descriptor (only permissions can be changed)
// IPC_RMID: remove message queue
if(msgctl(queue_id, IPC_STAT, &info) == -1){
perror("Cannot retrieve information about the message queue");
exit(EXIT_FAILURE);
}

printf("------------------------------\n");
printf("MESSAGE QUEUE %d\n", queue_id);
printf("Permissions:\n\
Owner uid: %u\n\
Owner gid: %u\n\
Creator uid: %u\n\
Creator gid: %u\n\
Mode : %o\n", info.msg_perm.uid, info.msg_perm.gid, info.msg_perm.cuid, info.msg_perm.cgid, info.msg_perm.mode);
printf("Time last message send : %d\n", info.msg_stime);
printf("Time last message received : %d\n", info.msg_rtime);
printf("Time last change : %d\n", info.msg_ctime);
printf("Number of messages : %d\n", info.msg_qnum);
printf("Maximum bytes : %d\n", info.msg_qbytes);
printf("PID last sender : %d\n", info.msg_lspid);
printf("PID last receiver : %d\n", info.msg_lrpid);
printf("------------------------------\n");
}

结构信息需要是全局的。

如果我在这个函数中定义它,我会得到检测到堆栈粉碎,我相信当 msqid_ds 超出范围并且当我尝试删除该结构时内核回复中止时会发生这种情况。这是我的猜测,但为什么会发生这种情况呢?难道我做错了什么?我还注意到,如果我收到 msqid_ds,如果我尝试立即删除队列 (msqctl(queue_id, IPC_RMID, 0)),则会收到相同的错误。

最佳答案

问题已解决。 msqid_ds是针对32位系统的,如果您在64位机器上操作则对应的结构体是msqid64_ds。

这是特定于实现的,我应该包含而不是

关于LinuxIPC : cannot remove msqid_ds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27314573/

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