我正在尝试为我的进程创建一个共享内存文件。文件名由几个部分组成,用于标识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;
}
}
答案 0 :(得分:0)
好。因为看起来OSX在SHM的文件名中非常有限...文件名的最大长度目前是每个部分31个字符(参见PSHMNAMELENGTH
中的/usr/include/sys/posix_shm.h
)