mq_unlink() always fails with EPERM
Christian Franke
Christian.Franke@t-online.de
Fri Jan 17 15:16:57 GMT 2025
mq_unlink() does not unlink anything and always returns -1 with errno =
EPERM.
Testcase:
$ uname -r
3.5.5-1.x86_64
$ cat mqunlink.c
#include <fcntl.h>
#include <mqueue.h>
#include <stdio.h>
int main()
{
const char mq_name[] = "/mqtest";
const struct mq_attr attr = { 0, 10, 42, 0 };
mqd_t mq = mq_open(mq_name, O_RDWR | O_CREAT | O_EXCL, S_IRUSR |
S_IWUSR, &attr);
if (mq == (mqd_t)-1) {
perror("mq_open"); return 1;
}
mq_close(mq);
if (mq_unlink(mq_name)) {
perror("mq_unlink"); return 1;
}
return 0;
}
$ gcc -o mqunlink mqunlink.c
$ ./mqunlink
mq_unlink: Operation not permitted
$ ./mqunlink
mq_open: File exists
$ ls /dev/mqueue/
mqtest
$ rm /dev/mqueue/mqtest # Works on Linux
rm: cannot remove '/dev/mqueue/mqtest': Operation not permitted
$ cmd /c del 'C:\cygwin64\dev\mqueue\mqtest'
...
$ strace ./mqunlink
...
49 50005 [main] mqunlink 17288 __set_errno: int unlink(const
char*):1141 setting errno 1
48 50053 [main] mqunlink 17288 unlink: -1 =
unlink(/dev/mqueue/mqtest), errno 1
...
mq_unlink: Operation not permitted
--
Regards,
Christian
More information about the Cygwin
mailing list