OSX: shm_open returns ENAMETOOLONG
OSX: shm_open returns ENAMETOOLONG
我正在尝试 atm 为我的进程创建一个共享内存文件。文件名由几个部分组成,用于标识 SHM 所属的进程及其内容。一个例子是:
shm_pl_dev_system_25077
我在 /tmp
中创建的目录中创建了所有文件,我拥有完全的读写权限。
所以完整的路径是:
/tmp/pl_dev/shm_pl_dev_system_25077
我在那里创建了几个文件,一些 fifo 管道和其他东西,还有 shm。我遇到的唯一问题是 shm_open
将始终 return 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 在 SHM 的文件名中非常有限......当前文件名的最大长度是每节 31 个字符(参见 /usr/include/sys/posix_shm.h
中的 PSHMNAMELENGTH
)
我正在尝试 atm 为我的进程创建一个共享内存文件。文件名由几个部分组成,用于标识 SHM 所属的进程及其内容。一个例子是:
shm_pl_dev_system_25077
我在 /tmp
中创建的目录中创建了所有文件,我拥有完全的读写权限。
所以完整的路径是:
/tmp/pl_dev/shm_pl_dev_system_25077
我在那里创建了几个文件,一些 fifo 管道和其他东西,还有 shm。我遇到的唯一问题是 shm_open
将始终 return 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 在 SHM 的文件名中非常有限......当前文件名的最大长度是每节 31 个字符(参见 /usr/include/sys/posix_shm.h
中的 PSHMNAMELENGTH
)