Monday, 15 August 2011

c - On FC 18 machine mq_open fails with error no EMFILE -



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