Я создал очередь сообщений со следующим кодом. Первые несколько раз он работает правильно.mq_open дает «слишком много открытых файлов»
int main()
{
mqd_t mqdes;
char mq_name[10] = "/mq";
int oflag = O_CREAT | O_RDWR, ret;
struct mq_attr attr;
attr.mq_maxmsg = 1024;
attr.mq_msgsize = 2048;
mqdes = mq_open(mq_name, oflag, 0766, &attr);
if(mqdes == -1) {
perror("mq_open");
if(errno == EMFILE)
perror("EMFILE");
exit(1);
}
printf("mqueue created, mq_descriptor: %d\n", mqdes);
ret = mq_close(mqdes);
if(ret == -1) {
perror("mq_close");
exit(2);
}
printf(" mq closed successful\n");
return 0;
}
После этого, он дает следующее сообщение об ошибке
mq_open: Too many open files
EMFILE: Too many open files
Но почему я получаю эту ошибку? Как я могу видеть очередности сообщений, например ipcs
для системы V?
Получаете ли вы 'MQ закрыл успешный \ n' сообщение в конце сессии? [ЗДЕСЬ] (http://stackoverflow.com/a/3056992/645128) - еще один пример использования mq_open, возможно, вы можете увидеть что-то там, что вы не делаете. – ryyker
@ryyker: как это может закончиться программа? mq_open терпит неудачу и дает ошибку. – SGG
Что касается вашего вопроса _ Как я могу видеть очереди сообщений posix, такие как ipcs для системы V? _ [ЭТО] (http://www.linuxforums.org/forum/red-hat-fedora-linux/93230-what-posix-equivalent -ipcs-m.html) ссылка немного об этом говорит. Я не вижу ничего другого в том, что вы опубликовали, что предполагает, что у вас должно быть слишком много файлов. – ryyker