以下是修改后的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("Owner: %d\n", buf.msg_perm.uid);
    printf("Permissions: %#o\n", buf.msg_perm.mode);
}
```
在原有的代码基础上,我们使用了msgctl函数来获取消息队列的属性信息,并从中提取出所有者和权限。其中,msg_perm结构体成员包含了所有者和权限信息。uid表示所有者的用户ID,mode表示权限的八进制表示。我们使用printf函数打印出这些信息。