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
?
答案 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之上。