gcc 4.72 c89
我正在使用这本书作为参考,来进行 mq_* POSIX 消息队列的操作。
The Linux Programming Interface by Michael Kerrisk page 1071
然而,在这个示例片段中,我已经注意到他们打开一个消息队列并从队列获取一些属性。但是,他们没有关闭它,这难道不是不良实践吗?如果不将其返回给操作系统,可能会发生资源泄漏,因为所有消息队列描述符都可能被耗尽。我猜,当进程死亡时,它会自动将所有资源返回给操作系统。但是,如果进程在服务器上24/7运行,则可能会产生重大影响。感谢任何建议。
int main(int argc, char *argv[])
{
mqd_t mqd;
struct mq_attr attr;
if (argc != 2 || strcmp(argv[1], "--help") == 0)
usageErr("%s mq-name\n", argv[0]);
mqd = mq_open(argv[1], O_RDONLY);
if (mqd == (mqd_t) -1)
errExit("mq_open");
if (mq_getattr(mqd, &attr) == -1)
errExit("mq_getattr");
printf("Maximum # of messages on queue: %ld\n", attr.mq_maxmsg);
printf("Maximum message size: %ld\n", attr.mq_msgsize);
printf("# of messages currently on queue: %ld\n", attr.mq_curmsgs);
exit(EXIT_SUCCESS);
}