仿照chmod命令,编写msg_chmod用于修改一个消息队列的权限值,且消息队列必须通过其关键值再标识。

动态 未结 0 111
小小草
小小草 LV1 2023年9月23日 23:40 发表
下面是一个简单的实现,可以通过命令行参数指定消息队列的关键值和新的权限值: ``` #include #include #include #include #include int main(int argc, char **argv) { key_t mkey; int msg_id; mode_t mode; if (argc != 3) { fprintf(stderr, "usage: msg_chmod keyval mode\n"); exit(1); } mkey = (key_t) atoi(argv[1]); mode = (mode_t) strtol(argv[2], NULL, 8); if ((msg_id = msgget(mkey, 0)) == -1) { perror("msgget failed"); exit(2); } if (msgctl(msg_id, IPC_SET, &(struct msqid_ds){.msg_perm.mode=mode}) == -1) { perror("msgctl"); exit(EXIT_FAILURE); } printf("Message queue %d permission changed to %#o\n", mkey, mode); exit(0); } ``` 这个程序首先从命令行参数中获取消息队列的关键值和新的权限值。然后,它使用`msgget`函数打开该消息队列,并使用`msgctl`函数修改消息队列的权限值。最后,它输出修改成功的消息。 注意,在`msgctl`函数调用中,我们使用了一个结构体字面量来指定要修改的字段。具体来说,我们设置了`msg_perm.mode`字段为新的权限值。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复