做项目时增加代码线程及消息队列,碰到了一个创建消息队列失败的问题,增加错误码打印显示 为errno=24,百度查阅too many open files,打开的文件过多。
解决方法:
可修改默认的系统设置,对消息队列的总大小进行扩充。
struct rlimit limit;
//rlimit是一个进程执行过程中所能得到的资源,这些资源包括虚拟内存大小AS,可创建的最大文件大小FSIZE,堆栈的大小STACK,消息队列字节数限制MSGQUEUE等,具体操作可以查查用户手册
我们需要用到的是消息队列的字节限制这个,RLIMIT_MSGQUEUEQ
首先获取下当前的消息队列字节数大小
getrlimit(RLIMIT_MSGQUEUE, &limit);
//可以通过打印limit.lim_cur 和 limit_max来看当前的字节限制
然后配置下新的更大的消息队列字节数大小
limit.lim_cur = 1000*1024; limit_max = 1000*1024;//或者更大的值
setrlimit(RLIMIT_MSGQUEUE, &limit); //配置好
getrlimit(RLIMIT_MSGQUEUE, &limit);//加打印查看新配置好的是否有效
结束~~
提供给大家以供借鉴,更多资料可随意百度。