OSX:shm_open返回ENAMETOOLONG

时间:2016-06-27 08:24:18

标签: macos file shared-memory

我正在尝试为我的进程创建一个共享内存文件。文件名由几个部分组成,用于标识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;
            }
        }

1 个答案:

答案 0 :(得分:0)

好。因为看起来OSX在SHM的文件名中非常有限...文件名的最大长度目前是每个部分31个字符(参见PSHMNAMELENGTH中的/usr/include/sys/posix_shm.h