我正在尝试为我的进程创建一个共享内存文件。文件名由几个部分组成,用于标识SHM所属的进程及其内容。一个例子是:shm_pl_dev_system_25077
我在/tmp
中创建的目录中创建所有文件,我有完全的读写权限。
所以完整的Path应该是:/tmp/pl_dev/shm_pl_dev_system_25077
我在那里创建了几个文件,一些fifo管道和其他东西,还有shm。我得到的唯一问题是shm_open
将始终返回errno 63 (ENAMETOOLONG)
。
你能告诉我这是什么问题吗?
代码如下:
handle_ = ::shm_open(shm_name.get(), O_RDWR, 0755);
if (handle_ == -1 && errno == ENOENT)
{
// SHM does not yet exists, so create it!
handle_ = ::shm_open(shm_name.get(), O_CREAT | O_RDWR, 0755);
if (handle_ != -1) {
created_ = true;
}
else
{
if (!silent_)
{
log.error("Couldn't create the SHM (%d).", errno);
}
return false;
}
}
好的。似乎OSX在SHMs的文件名上非常有限…当前文件名的最大长度是每节31个字符(参见/usr/include/sys/posix_shm.h
中的PSHMNAMELENGTH
)