mq_unlink的限制是什么?

时间:2017-06-13 12:54:16

标签: c++ posix

Documentation for mq_unlink

  

ENAMETOOLONG       名字太长了。

但是这个限制是什么?我以为是NAME_MAX,但事实并非如此。以下代码永远运行(只要有内存,我猜)。

#include <mqueue.h>
#include <string>
#include <errno.h>
#include <unistd.h>

int main(void)
{
    std::string tooLong = "long";
    do
    {
        usleep(10);
        tooLong.append("longer");
        mq_unlink(tooLong.c_str());
    }
    while(errno != ENAMETOOLONG);
}

那么限制是什么?该函数何时返回ENAMETOOLONG

1 个答案:

答案 0 :(得分:0)

谢谢,你是对的。

问题是缺少斜线!

#include <mqueue.h>
#include <string>
#include <errno.h>
#include <unistd.h>
#include <iostream>
#include <limits.h>

int main(void)
{
    std::string tooLong = "/long";
    do
    {
        usleep(10);
        tooLong.append("longer");
        mq_unlink(tooLong.c_str());
    }
    while(errno != ENAMETOOLONG);
    std::cout << tooLong.length() << " " << tooLong << std::endl;    
}

这是有效的,长度是257,正好在NAME_MAX之上。