c - On FC 18 machine mq_open fails with error no EMFILE -
i trying open new message queue, fails many open files (24) error.
here sample code:
#define alert_q_name "/alert_q_test" mqd_t mqdes; int main() { struct mq_attr attr; attr.mq_flags = 0; attr.mq_maxmsg = 512; attr.mq_msgsize = 1536; mqdes = mq_open(alert_q_name, o_rdonly | o_creat, 0600, &attr); if(mqdes == (mqd_t) -1) { printf("failed:%d(%s)\n",errno,strerror(errno)); exit(-1); } else { printf("passed\n"); mq_close(mqdes); } homecoming 0; } the scheme wide limit number of message queues can created is:
$cat /proc/sys/fs/mqueue/queues_max 256
i sure scheme limit isn't reached since running sample code on newly installed fc18 box. neways confirm it, mounted message queue filesystem:
$mkdir /dev/mqueue $mount -t mqueue none /dev/mqueue $ ls -l /dev/mqueue total 0 $gcc -g -o mqueue mqueue.c -lrt $./mqueue failed:24(too many open files) $ ls -l /dev/mqueue total 0
jus fc18, unable create message queues on linux boxes running on kernel version 3.6.10 , 3.6.11. while same programme runs fine on linux 2.6.31 , linux 3.3.4. seems got broke downwards somewhere. or missing here? help please?!? thanks!!
a little late answer, but:
mq_open can fail errno=emfile if many files open or if max mqueue size overstepped.
see rlimit_msgqueue in setrlimit(2) more info on size calculation.
to current soft/hard limits:
grep -e 'limit|queue' /proc/self/limits to alter limits permanently, edit /etc/security/limits.conf , login user 1 time again 'su - '.
/etc/security/limits.conf:
[user] hard msgqueue unlimited [user] soft msgqueue unlimited another possibility set softlimit setrlimt(2)/prlimit(2). if hardlimit little purposes, cap_sys_resource needed.
c linux message-queue
No comments:
Post a Comment