以下是修改后的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以及访问权限。最后将这些信息打印出来。