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);
}
最佳答案
是的,这是一个坏习惯。
但是一旦进程退出,操作系统就会回收分配给该进程的所有资源。
在这种情况下,资源只会泄漏不多的时间,
队列使用结束与程序结束之间的时间,这非常小,因此无关紧要。
如果进程持续运行,则必须清除明确获取的所有资源,否则会导致资源泄漏。
关于c - 明确关闭消息队列最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14190514/