以下是修改后的show_msg函数:
```c
void show_msg(int msgid) {
struct msqid_ds buf;
if (msgctl(msgid, IPC_STAT, &buf) == -1) {
perror("msgctl");
exit(EXIT_FAILURE);
}
printf("Message queue owner UID: %d\n", buf.msg_perm.uid);
printf("Message queue owner GID: %d\n", buf.msg_perm.gid);
printf("Message queue access permissions: %#o\n", buf.msg_perm.mode);
}
```
在原有的基础上,我们使用了msgctl函数获取消息队列的属性,并从中提取出所有者的UID和GID以及访问权限。最后将这些信息打印出来。