以下是修改后的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函数打印出这些信息。