这是一个棘手的问题。由于权限错误,无法创建POSIX命名信号(EACCES)
无论系统中没有信号量的名称(因此没有名称重叠机会),无法创建POSIX命名信号量(sem_open
)。这是一个非特权用户,可以使用shmget创建共享内存。
平台:的Solaris 10
硬件:英特尔至强E5000系列CPU
上运行AMD的CPU与非特权用户其他Solaris 10平台上不会发生。在Linux机器上不会发生。这些机器之间没有明显的区别,除了这台机器很可能是虚拟化的。
代码:
const char* name = "/permission_test_semaphore";
sem_t* sem = sem_open(name, O_CREAT | O_EXCL, 0644, 0);
if (SEM_FAILED == sem)
{
printf("Could not create test semaphore %s, errno = %d\n", name, errno);
}
输出是:
Could not create test semaphore /permission_test_semaphore, errno = 13
任何想法,欢迎 - 我的希望都没有了。
ipcs与POSIX sems无关。它适用于传统的sysvipc。 – 2013-02-21 14:40:27
正确 - 双重检查。拿出了'ipcs'的参考。谢谢 – Makanaky 2013-02-21 14:42:01